opencode-skills-collection 3.1.12 → 3.1.14

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 (770) hide show
  1. package/README.md +4 -6
  2. package/bundled-skills/.antigravity-install-manifest.json +195 -1
  3. package/bundled-skills/ab-testing/SKILL.md +368 -0
  4. package/bundled-skills/ab-testing/evals/evals.json +105 -0
  5. package/bundled-skills/ab-testing/references/sample-size-guide.md +263 -0
  6. package/bundled-skills/ab-testing/references/test-templates.md +277 -0
  7. package/bundled-skills/accint-commitments/SKILL.md +32 -0
  8. package/bundled-skills/accint-frames/SKILL.md +35 -0
  9. package/bundled-skills/accint-solve/SKILL.md +22 -192
  10. package/bundled-skills/add-app-clip/SKILL.md +297 -0
  11. package/bundled-skills/add-app-clip/agents/openai.yaml +4 -0
  12. package/bundled-skills/add-app-clip/references/native-module.md +96 -0
  13. package/bundled-skills/agent-memory/SKILL.md +84 -0
  14. package/bundled-skills/alternatives-pages/README.md +46 -0
  15. package/bundled-skills/alternatives-pages/SKILL.md +376 -0
  16. package/bundled-skills/analytics/SKILL.md +324 -0
  17. package/bundled-skills/analytics/evals/evals.json +90 -0
  18. package/bundled-skills/analytics/references/event-library.md +260 -0
  19. package/bundled-skills/analytics/references/ga4-implementation.md +300 -0
  20. package/bundled-skills/analytics/references/gtm-implementation.md +390 -0
  21. package/bundled-skills/anti-deception/SKILL.md +50 -0
  22. package/bundled-skills/api-analyzer/SKILL.md +101 -0
  23. package/bundled-skills/api-and-interface-design/SKILL.md +307 -0
  24. package/bundled-skills/api-designer/SKILL.md +167 -0
  25. package/bundled-skills/api-integration/SKILL.md +175 -0
  26. package/bundled-skills/api-onboarding/README.md +47 -0
  27. package/bundled-skills/api-onboarding/SKILL.md +473 -0
  28. package/bundled-skills/api-sdk-generator/SKILL.md +223 -0
  29. package/bundled-skills/appium-skill/SKILL.md +317 -0
  30. package/bundled-skills/applicationinsights-web-ts/SKILL.md +477 -0
  31. package/bundled-skills/automated-triage/SKILL.md +189 -0
  32. package/bundled-skills/aws-agentic-ai/SKILL.md +141 -0
  33. package/bundled-skills/aws-cdk-development/SKILL.md +275 -0
  34. package/bundled-skills/aws-cost-operations/SKILL.md +273 -0
  35. package/bundled-skills/aws-mcp-setup/SKILL.md +192 -0
  36. package/bundled-skills/aws-serverless-eda/SKILL.md +394 -0
  37. package/bundled-skills/aws-sst-development/SKILL.md +175 -0
  38. package/bundled-skills/azure-ai-language-conversations-py/SKILL.md +112 -0
  39. package/bundled-skills/azure-servicebus-rust/SKILL.md +182 -0
  40. package/bundled-skills/azure-storage-queue-rust/SKILL.md +178 -0
  41. package/bundled-skills/baseline-ui/SKILL.md +15 -10
  42. package/bundled-skills/before-you-build/SKILL.md +111 -0
  43. package/bundled-skills/brooks-audit/SKILL.md +49 -0
  44. package/bundled-skills/brooks-audit/architecture-guide.md +195 -0
  45. package/bundled-skills/brooks-audit/onboarding-guide.md +89 -0
  46. package/bundled-skills/brooks-debt/SKILL.md +42 -0
  47. package/bundled-skills/brooks-debt/debt-guide.md +125 -0
  48. package/bundled-skills/brooks-harness/SKILL.md +139 -0
  49. package/bundled-skills/brooks-review/SKILL.md +42 -0
  50. package/bundled-skills/brooks-review/pr-review-guide.md +163 -0
  51. package/bundled-skills/brooks-sweep/SKILL.md +44 -0
  52. package/bundled-skills/brooks-sweep/sweep-guide.md +264 -0
  53. package/bundled-skills/brooks-test/SKILL.md +41 -0
  54. package/bundled-skills/brooks-test/test-guide.md +147 -0
  55. package/bundled-skills/bug-hunt-swarm/SKILL.md +189 -0
  56. package/bundled-skills/bug-hunt-swarm/agents/openai.yaml +4 -0
  57. package/bundled-skills/building-native-ui/SKILL.md +77 -18
  58. package/bundled-skills/building-native-ui/agents/openai.yaml +4 -0
  59. package/bundled-skills/building-native-ui/references/animations.md +220 -0
  60. package/bundled-skills/building-native-ui/references/controls.md +270 -0
  61. package/bundled-skills/building-native-ui/references/form-sheet.md +253 -0
  62. package/bundled-skills/building-native-ui/references/gradients.md +106 -0
  63. package/bundled-skills/building-native-ui/references/icons.md +213 -0
  64. package/bundled-skills/building-native-ui/references/media.md +198 -0
  65. package/bundled-skills/building-native-ui/references/route-structure.md +229 -0
  66. package/bundled-skills/building-native-ui/references/search.md +248 -0
  67. package/bundled-skills/building-native-ui/references/storage.md +121 -0
  68. package/bundled-skills/building-native-ui/references/tabs.md +433 -0
  69. package/bundled-skills/building-native-ui/references/toolbar-and-headers.md +284 -0
  70. package/bundled-skills/building-native-ui/references/visual-effects.md +197 -0
  71. package/bundled-skills/building-native-ui/references/webgpu-three.md +605 -0
  72. package/bundled-skills/building-native-ui/references/zoom-transitions.md +158 -0
  73. package/bundled-skills/changelog-updates/README.md +53 -0
  74. package/bundled-skills/changelog-updates/SKILL.md +552 -0
  75. package/bundled-skills/ci-cd-and-automation/SKILL.md +403 -0
  76. package/bundled-skills/claimable-postgres/SKILL.md +91 -59
  77. package/bundled-skills/co-marketing/SKILL.md +301 -0
  78. package/bundled-skills/co-marketing/evals/evals.json +84 -0
  79. package/bundled-skills/code-review-and-quality/SKILL.md +394 -0
  80. package/bundled-skills/code-showcase-core-components/SKILL.md +281 -0
  81. package/bundled-skills/code-showcase-react-ui-patterns/SKILL.md +306 -0
  82. package/bundled-skills/code-showcase-systematic-debugging/SKILL.md +167 -0
  83. package/bundled-skills/code-showcase-testing-patterns/SKILL.md +276 -0
  84. package/bundled-skills/code-simplification/SKILL.md +344 -0
  85. package/bundled-skills/community-building/README.md +102 -0
  86. package/bundled-skills/community-building/SKILL.md +415 -0
  87. package/bundled-skills/competitor-profiling/SKILL.md +427 -0
  88. package/bundled-skills/competitor-profiling/evals/evals.json +85 -0
  89. package/bundled-skills/competitor-profiling/references/templates.md +167 -0
  90. package/bundled-skills/competitor-profiling/references/tool-reference.md +179 -0
  91. package/bundled-skills/competitor-tracking/README.md +40 -0
  92. package/bundled-skills/competitor-tracking/SKILL.md +322 -0
  93. package/bundled-skills/context-engineering/SKILL.md +302 -0
  94. package/bundled-skills/cro/SKILL.md +202 -0
  95. package/bundled-skills/cro/evals/evals.json +111 -0
  96. package/bundled-skills/cro/references/experiments.md +248 -0
  97. package/bundled-skills/cro/references/form.md +422 -0
  98. package/bundled-skills/cron-doctor/scripts/cron-engine.js +10 -7
  99. package/bundled-skills/cucumber-skill/SKILL.md +235 -0
  100. package/bundled-skills/customer-research/SKILL.md +287 -0
  101. package/bundled-skills/customer-research/evals/evals.json +162 -0
  102. package/bundled-skills/customer-research/references/source-guides.md +401 -0
  103. package/bundled-skills/cypress-skill/SKILL.md +235 -0
  104. package/bundled-skills/debugging-and-error-recovery/SKILL.md +313 -0
  105. package/bundled-skills/debugging-code/SKILL.md +284 -0
  106. package/bundled-skills/debugging-code/references/advanced-techniques.md +50 -0
  107. package/bundled-skills/debugging-code/references/installing-debuggers.md +67 -0
  108. package/bundled-skills/debugging-code/scripts/install-dap.sh +87 -0
  109. package/bundled-skills/deprecation-and-migration/SKILL.md +219 -0
  110. package/bundled-skills/design-philosophy/SKILL.md +40 -0
  111. package/bundled-skills/design-philosophy/reference.md +19 -0
  112. package/bundled-skills/design-spatial/SKILL.md +271 -0
  113. package/bundled-skills/design-spatial/scripts/layout-audit.js +138 -0
  114. package/bundled-skills/design-system/SKILL.md +140 -0
  115. package/bundled-skills/design-system/references/motion-choreography.md +111 -0
  116. package/bundled-skills/design-thinking/SKILL.md +109 -0
  117. package/bundled-skills/design-ux/SKILL.md +75 -0
  118. package/bundled-skills/dev-to-hashnode/README.md +62 -0
  119. package/bundled-skills/dev-to-hashnode/SKILL.md +399 -0
  120. package/bundled-skills/developer-advocacy/README.md +102 -0
  121. package/bundled-skills/developer-advocacy/SKILL.md +423 -0
  122. package/bundled-skills/developer-audience-context/README.md +61 -0
  123. package/bundled-skills/developer-audience-context/SKILL.md +271 -0
  124. package/bundled-skills/developer-audience-context/references/example-apitest.md +175 -0
  125. package/bundled-skills/developer-audience-context/references/template.md +152 -0
  126. package/bundled-skills/developer-churn/README.md +80 -0
  127. package/bundled-skills/developer-churn/SKILL.md +652 -0
  128. package/bundled-skills/developer-listening/README.md +30 -0
  129. package/bundled-skills/developer-listening/SKILL.md +232 -0
  130. package/bundled-skills/developer-newsletter/README.md +84 -0
  131. package/bundled-skills/developer-newsletter/SKILL.md +376 -0
  132. package/bundled-skills/developer-onboarding/README.md +35 -0
  133. package/bundled-skills/developer-onboarding/SKILL.md +530 -0
  134. package/bundled-skills/developer-sandbox/README.md +47 -0
  135. package/bundled-skills/developer-sandbox/SKILL.md +504 -0
  136. package/bundled-skills/developer-seo/README.md +36 -0
  137. package/bundled-skills/developer-seo/SKILL.md +296 -0
  138. package/bundled-skills/developer-signup-flow/README.md +36 -0
  139. package/bundled-skills/developer-signup-flow/SKILL.md +397 -0
  140. package/bundled-skills/devrel-content/README.md +81 -0
  141. package/bundled-skills/devrel-content/SKILL.md +428 -0
  142. package/bundled-skills/dispatch/SKILL.md +130 -0
  143. package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
  144. package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
  145. package/bundled-skills/docs/maintainers/repo-growth-seo.md +3 -3
  146. package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
  147. package/bundled-skills/docs/users/bundles.md +1 -1
  148. package/bundled-skills/docs/users/claude-code-skills.md +1 -1
  149. package/bundled-skills/docs/users/faq.md +1 -1
  150. package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
  151. package/bundled-skills/docs/users/getting-started.md +1 -1
  152. package/bundled-skills/docs/users/kiro-integration.md +1 -1
  153. package/bundled-skills/docs/users/usage.md +8 -8
  154. package/bundled-skills/docs/users/visual-guide.md +8 -8
  155. package/bundled-skills/docs-as-marketing/README.md +37 -0
  156. package/bundled-skills/docs-as-marketing/SKILL.md +398 -0
  157. package/bundled-skills/documentation-and-adrs/SKILL.md +291 -0
  158. package/bundled-skills/doubt-driven-development/SKILL.md +256 -0
  159. package/bundled-skills/eas-update-insights/SKILL.md +232 -0
  160. package/bundled-skills/eas-update-insights/agents/openai.yaml +4 -0
  161. package/bundled-skills/eas-update-insights/references/channel-insights-schema.md +47 -0
  162. package/bundled-skills/eas-update-insights/references/update-insights-schema.md +69 -0
  163. package/bundled-skills/expo-api-routes/SKILL.md +9 -5
  164. package/bundled-skills/expo-api-routes/agents/openai.yaml +4 -0
  165. package/bundled-skills/expo-brownfield/SKILL.md +71 -0
  166. package/bundled-skills/expo-brownfield/agents/openai.yaml +4 -0
  167. package/bundled-skills/expo-brownfield/references/brownfield-integrated.md +526 -0
  168. package/bundled-skills/expo-brownfield/references/brownfield-isolated.md +402 -0
  169. package/bundled-skills/expo-brownfield/references/comparison.md +63 -0
  170. package/bundled-skills/expo-brownfield/references/troubleshooting.md +88 -0
  171. package/bundled-skills/expo-cicd-workflows/SKILL.md +18 -16
  172. package/bundled-skills/expo-cicd-workflows/agents/openai.yaml +4 -0
  173. package/bundled-skills/expo-cicd-workflows/scripts/fetch.js +109 -0
  174. package/bundled-skills/expo-cicd-workflows/scripts/package.json +11 -0
  175. package/bundled-skills/expo-cicd-workflows/scripts/validate.js +84 -0
  176. package/bundled-skills/expo-deployment/SKILL.md +157 -53
  177. package/bundled-skills/expo-deployment/agents/openai.yaml +4 -0
  178. package/bundled-skills/expo-deployment/references/app-store-metadata.md +497 -0
  179. package/bundled-skills/expo-deployment/references/ios-app-store.md +371 -0
  180. package/bundled-skills/expo-deployment/references/play-store.md +246 -0
  181. package/bundled-skills/expo-deployment/references/testflight.md +58 -0
  182. package/bundled-skills/expo-deployment/references/workflows.md +160 -0
  183. package/bundled-skills/expo-dev-client/SKILL.md +25 -14
  184. package/bundled-skills/expo-dev-client/agents/openai.yaml +4 -0
  185. package/bundled-skills/expo-examples/SKILL.md +111 -0
  186. package/bundled-skills/expo-examples/references/catalog.md +105 -0
  187. package/bundled-skills/expo-module/SKILL.md +152 -0
  188. package/bundled-skills/expo-module/agents/openai.yaml +4 -0
  189. package/bundled-skills/expo-module/references/config-plugin.md +90 -0
  190. package/bundled-skills/expo-module/references/create-expo-module.md +206 -0
  191. package/bundled-skills/expo-module/references/lifecycle.md +127 -0
  192. package/bundled-skills/expo-module/references/module-config.md +48 -0
  193. package/bundled-skills/expo-module/references/native-module.md +286 -0
  194. package/bundled-skills/expo-module/references/native-view.md +171 -0
  195. package/bundled-skills/expo-observe/SKILL.md +44 -0
  196. package/bundled-skills/expo-observe/references/metrics.md +47 -0
  197. package/bundled-skills/expo-observe/references/queries.md +342 -0
  198. package/bundled-skills/expo-observe/references/setup.md +255 -0
  199. package/bundled-skills/expo-tailwind-setup/SKILL.md +13 -10
  200. package/bundled-skills/expo-tailwind-setup/agents/openai.yaml +4 -0
  201. package/bundled-skills/expo-ui/SKILL.md +61 -0
  202. package/bundled-skills/expo-ui/agents/openai.yaml +4 -0
  203. package/bundled-skills/expo-ui/references/drop-in-replacements.md +27 -0
  204. package/bundled-skills/expo-ui/references/jetpack-compose.md +73 -0
  205. package/bundled-skills/expo-ui/references/swift-ui.md +73 -0
  206. package/bundled-skills/expo-ui/references/universal.md +73 -0
  207. package/bundled-skills/expo-ui/scripts/list-components.js +193 -0
  208. package/bundled-skills/faf-context/SKILL.md +106 -0
  209. package/bundled-skills/faf-go/SKILL.md +336 -0
  210. package/bundled-skills/fixing-accessibility/SKILL.md +16 -5
  211. package/bundled-skills/fixing-metadata/SKILL.md +18 -8
  212. package/bundled-skills/fixing-motion-performance/SKILL.md +17 -6
  213. package/bundled-skills/formik-patterns/SKILL.md +379 -0
  214. package/bundled-skills/free-tier-strategy/README.md +39 -0
  215. package/bundled-skills/free-tier-strategy/SKILL.md +462 -0
  216. package/bundled-skills/frontend-architecture/SKILL.md +419 -0
  217. package/bundled-skills/frontend-data-contracts/SKILL.md +331 -0
  218. package/bundled-skills/frontend-observability/SKILL.md +434 -0
  219. package/bundled-skills/frontend-optimistic-mutations/SKILL.md +278 -0
  220. package/bundled-skills/frontend-seo/SKILL.md +710 -0
  221. package/bundled-skills/frontend-slides-frontend-slides/SKILL.md +397 -0
  222. package/bundled-skills/frontend-ui-engineering/SKILL.md +341 -0
  223. package/bundled-skills/gemini-api-dev/SKILL.md +96 -53
  224. package/bundled-skills/gemini-live-api-dev/SKILL.md +339 -0
  225. package/bundled-skills/gemini-omni-flash-api/SKILL.md +335 -0
  226. package/bundled-skills/gemini-omni-flash-api/scripts/upload_file.py +218 -0
  227. package/bundled-skills/gemini-omni-flash-api/scripts/video/generate_video.py +439 -0
  228. package/bundled-skills/gemini-omni-flash-api/scripts/video/inspect_video.py +197 -0
  229. package/bundled-skills/gemini-omni-flash-api/scripts/video/prep_video.py +255 -0
  230. package/bundled-skills/gh-image/SKILL.md +10 -2
  231. package/bundled-skills/git-workflow-and-versioning/SKILL.md +313 -0
  232. package/bundled-skills/github-presence/README.md +67 -0
  233. package/bundled-skills/github-presence/SKILL.md +484 -0
  234. package/bundled-skills/graphql-schema/SKILL.md +309 -0
  235. package/bundled-skills/hf-mcp/SKILL.md +195 -0
  236. package/bundled-skills/hf-mem/SKILL.md +92 -0
  237. package/bundled-skills/hugging-face-cli/SKILL.md +155 -115
  238. package/bundled-skills/hugging-face-community-evals/SKILL.md +14 -7
  239. package/bundled-skills/hugging-face-dataset-viewer/SKILL.md +30 -37
  240. package/bundled-skills/hugging-face-gradio/SKILL.md +14 -7
  241. package/bundled-skills/hugging-face-model-trainer/SKILL.md +42 -11
  242. package/bundled-skills/hugging-face-model-trainer/references/gguf_conversion.md +5 -0
  243. package/bundled-skills/hugging-face-model-trainer/scripts/convert_to_gguf.py +57 -51
  244. package/bundled-skills/hugging-face-model-trainer/scripts/hf_benchmarks.py +659 -0
  245. package/bundled-skills/hugging-face-paper-publisher/SKILL.md +13 -6
  246. package/bundled-skills/hugging-face-papers/SKILL.md +12 -5
  247. package/bundled-skills/hugging-face-trackio/SKILL.md +11 -5
  248. package/bundled-skills/hugging-face-vision-trainer/SKILL.md +11 -5
  249. package/bundled-skills/huggingface-best/SKILL.md +143 -0
  250. package/bundled-skills/huggingface-local-models/SKILL.md +130 -0
  251. package/bundled-skills/huggingface-local-models/references/hardware.md +38 -0
  252. package/bundled-skills/huggingface-local-models/references/hub-discovery.md +178 -0
  253. package/bundled-skills/huggingface-local-models/references/quantization.md +256 -0
  254. package/bundled-skills/huggingface-lora-space-builder/SKILL.md +409 -0
  255. package/bundled-skills/huggingface-lora-space-builder/references/adapting-to-the-lora.md +113 -0
  256. package/bundled-skills/huggingface-lora-space-builder/references/base-models/krea-2.md +63 -0
  257. package/bundled-skills/huggingface-lora-space-builder/references/base-models/ltx.md +205 -0
  258. package/bundled-skills/huggingface-lora-space-builder/references/base-models/qwen-image.md +144 -0
  259. package/bundled-skills/huggingface-lora-space-builder/references/creative-mode.md +262 -0
  260. package/bundled-skills/huggingface-lora-space-builder/references/tasks.md +124 -0
  261. package/bundled-skills/huggingface-lora-space-builder/references/zerogpu-and-publishing.md +194 -0
  262. package/bundled-skills/huggingface-spaces/SKILL.md +247 -0
  263. package/bundled-skills/huggingface-spaces/references/buckets.md +89 -0
  264. package/bundled-skills/huggingface-spaces/references/debugging.md +234 -0
  265. package/bundled-skills/huggingface-spaces/references/gradio.md +171 -0
  266. package/bundled-skills/huggingface-spaces/references/grants.md +56 -0
  267. package/bundled-skills/huggingface-spaces/references/inference-providers.md +85 -0
  268. package/bundled-skills/huggingface-spaces/references/known-errors.md +232 -0
  269. package/bundled-skills/huggingface-spaces/references/requirements.md +153 -0
  270. package/bundled-skills/huggingface-spaces/references/zerogpu.md +276 -0
  271. package/bundled-skills/huggingface-tool-builder/SKILL.md +137 -0
  272. package/bundled-skills/huggingface-tool-builder/references/baseline_hf_api.py +57 -0
  273. package/bundled-skills/huggingface-tool-builder/references/baseline_hf_api.sh +40 -0
  274. package/bundled-skills/huggingface-tool-builder/references/baseline_hf_api.tsx +57 -0
  275. package/bundled-skills/huggingface-tool-builder/references/find_models_by_paper.sh +230 -0
  276. package/bundled-skills/huggingface-tool-builder/references/hf_enrich_models.sh +96 -0
  277. package/bundled-skills/huggingface-tool-builder/references/hf_model_card_frontmatter.sh +188 -0
  278. package/bundled-skills/huggingface-tool-builder/references/hf_model_papers_auth.sh +171 -0
  279. package/bundled-skills/huggingface-zerogpu/SKILL.md +306 -0
  280. package/bundled-skills/huggingface-zerogpu/references/concurrency.md +79 -0
  281. package/bundled-skills/huggingface-zerogpu/references/cuda-and-deps.md +66 -0
  282. package/bundled-skills/huggingface-zerogpu/references/how-quota-works.md +74 -0
  283. package/bundled-skills/huggingface-zerogpu/references/how-zerogpu-works.md +50 -0
  284. package/bundled-skills/hugo-to-markdown/SKILL.md +201 -0
  285. package/bundled-skills/hugo-to-markdown/agents/openai.yaml +4 -0
  286. package/bundled-skills/hugo-to-markdown/references/conversion-workflow.md +143 -0
  287. package/bundled-skills/hugo-to-markdown/references/front-matter-and-content.md +145 -0
  288. package/bundled-skills/hugo-to-markdown/references/links-assets-and-validation.md +106 -0
  289. package/bundled-skills/hugo-to-markdown/references/shortcodes-and-render-hooks.md +281 -0
  290. package/bundled-skills/hugo-to-markdown/scripts/check_standard_markdown.py +70 -0
  291. package/bundled-skills/hugo-to-markdown/scripts/inventory_hugo_rules.py +188 -0
  292. package/bundled-skills/hyperexecute-skill/SKILL.md +65 -0
  293. package/bundled-skills/idea-refine/SKILL.md +195 -0
  294. package/bundled-skills/idea-refine/examples.md +238 -0
  295. package/bundled-skills/idea-refine/frameworks.md +99 -0
  296. package/bundled-skills/idea-refine/refinement-criteria.md +113 -0
  297. package/bundled-skills/idea-refine/scripts/idea-refine.sh +15 -0
  298. package/bundled-skills/implement/SKILL.md +32 -0
  299. package/bundled-skills/incremental-implementation/SKILL.md +262 -0
  300. package/bundled-skills/jest-skill/SKILL.md +182 -0
  301. package/bundled-skills/junit-5-skill/SKILL.md +236 -0
  302. package/bundled-skills/logic-diff/SKILL.md +50 -0
  303. package/bundled-skills/logic-diff/logic-diff-guide.md +75 -0
  304. package/bundled-skills/logic-explain/SKILL.md +50 -0
  305. package/bundled-skills/logic-explain/logic-explain-guide.md +74 -0
  306. package/bundled-skills/logic-fix-all/SKILL.md +87 -0
  307. package/bundled-skills/logic-fix-all/guide-phases-0-2-consent-scope-health.md +113 -0
  308. package/bundled-skills/logic-fix-all/guide-phases-3-5-review-locate-clarify.md +47 -0
  309. package/bundled-skills/logic-fix-all/guide-phases-6-9-fix-iterate-report.md +143 -0
  310. package/bundled-skills/logic-fix-all/logic-fix-all-guide.md +60 -0
  311. package/bundled-skills/logic-locate/SKILL.md +52 -0
  312. package/bundled-skills/logic-locate/logic-locate-guide.md +85 -0
  313. package/bundled-skills/logic-review/SKILL.md +100 -0
  314. package/bundled-skills/logic-review/logic-review-guide.md +296 -0
  315. package/bundled-skills/longbridge-content/SKILL.md +87 -0
  316. package/bundled-skills/longbridge-fundamentals/SKILL.md +134 -0
  317. package/bundled-skills/longbridge-market-data/SKILL.md +129 -0
  318. package/bundled-skills/loopy/SKILL.md +289 -0
  319. package/bundled-skills/loopy/agents/openai.yaml +4 -0
  320. package/bundled-skills/loopy/references/audit.md +61 -0
  321. package/bundled-skills/loopy/references/debrief.md +43 -0
  322. package/bundled-skills/loopy/references/discover.md +72 -0
  323. package/bundled-skills/loopy/references/publish.md +65 -0
  324. package/bundled-skills/loopy/references/run.md +73 -0
  325. package/bundled-skills/marketing-plan/SKILL.md +283 -0
  326. package/bundled-skills/marketing-plan/evals/evals.json +96 -0
  327. package/bundled-skills/marketing-plan/references/aarrr-framework.md +180 -0
  328. package/bundled-skills/marketing-plan/references/budget-planning.md +168 -0
  329. package/bundled-skills/marketing-plan/references/client-types.md +373 -0
  330. package/bundled-skills/marketing-plan/references/current-state-rubric.md +255 -0
  331. package/bundled-skills/marketing-plan/references/example-quietude.md +972 -0
  332. package/bundled-skills/marketing-plan/references/funding-stage-unlocks.md +230 -0
  333. package/bundled-skills/marketing-plan/references/growth-patterns.md +148 -0
  334. package/bundled-skills/marketing-plan/references/idea-cross-reference.md +265 -0
  335. package/bundled-skills/marketing-plan/references/measurement-framework.md +213 -0
  336. package/bundled-skills/marketing-plan/references/methodology.md +363 -0
  337. package/bundled-skills/marketing-plan/references/ops-stack-mapping.md +197 -0
  338. package/bundled-skills/marketing-plan/references/plan-template.md +494 -0
  339. package/bundled-skills/marketing-plan/references/team-and-agency-model.md +278 -0
  340. package/bundled-skills/mdpr-skill/SKILL.md +233 -0
  341. package/bundled-skills/monte-carlo-analyze-root-cause/SKILL.md +229 -0
  342. package/bundled-skills/monte-carlo-asset-health/SKILL.md +200 -0
  343. package/bundled-skills/monte-carlo-monitoring-advisor/SKILL.md +317 -0
  344. package/bundled-skills/monte-carlo-performance-diagnosis/SKILL.md +153 -0
  345. package/bundled-skills/monte-carlo-remediation/SKILL.md +359 -0
  346. package/bundled-skills/monte-carlo-storage-cost-analysis/SKILL.md +162 -0
  347. package/bundled-skills/native-data-fetching/SKILL.md +11 -8
  348. package/bundled-skills/native-data-fetching/agents/openai.yaml +4 -0
  349. package/bundled-skills/native-data-fetching/references/expo-router-loaders.md +341 -0
  350. package/bundled-skills/neon-ai-gateway/SKILL.md +237 -0
  351. package/bundled-skills/neon-functions/SKILL.md +465 -0
  352. package/bundled-skills/neon-functions/references/ai-sdk.md +139 -0
  353. package/bundled-skills/neon-functions/references/hono-websockets.md +145 -0
  354. package/bundled-skills/neon-functions/references/mastra-studio.md +132 -0
  355. package/bundled-skills/neon-functions/references/mcp.md +137 -0
  356. package/bundled-skills/neon-functions/references/sentry.md +131 -0
  357. package/bundled-skills/neon-functions/references/sse.md +143 -0
  358. package/bundled-skills/neon-object-storage/SKILL.md +200 -0
  359. package/bundled-skills/neon-postgres/SKILL.md +234 -469
  360. package/bundled-skills/neon-postgres-branches/SKILL.md +292 -0
  361. package/bundled-skills/neon-postgres-egress-optimizer/SKILL.md +256 -0
  362. package/bundled-skills/newman-cicd-integration/SKILL.md +330 -0
  363. package/bundled-skills/observability-and-instrumentation/SKILL.md +216 -0
  364. package/bundled-skills/odw/SKILL.md +57 -0
  365. package/bundled-skills/offers/SKILL.md +168 -0
  366. package/bundled-skills/offers/references/bonus-stacking.md +150 -0
  367. package/bundled-skills/offers/references/examples.md +215 -0
  368. package/bundled-skills/offers/references/guarantee-design.md +172 -0
  369. package/bundled-skills/offers/references/offer-anatomy.md +203 -0
  370. package/bundled-skills/offers/references/offer-formats.md +240 -0
  371. package/bundled-skills/offers/references/scarcity-urgency.md +175 -0
  372. package/bundled-skills/offers/references/value-equation.md +134 -0
  373. package/bundled-skills/onboarding/SKILL.md +235 -0
  374. package/bundled-skills/onboarding/evals/evals.json +92 -0
  375. package/bundled-skills/onboarding/references/experiments.md +258 -0
  376. package/bundled-skills/open-source-marketing/README.md +100 -0
  377. package/bundled-skills/open-source-marketing/SKILL.md +466 -0
  378. package/bundled-skills/openapi-spec-generator/SKILL.md +335 -0
  379. package/bundled-skills/performance-optimization/SKILL.md +363 -0
  380. package/bundled-skills/planning-and-task-breakdown/SKILL.md +240 -0
  381. package/bundled-skills/polis-protocol-a-self-optimizing-city-of-agents/SKILL.md +170 -0
  382. package/bundled-skills/postgresql-cli/SKILL.md +498 -0
  383. package/bundled-skills/postgresql-cli/references/cli-options-and-variables.md +444 -0
  384. package/bundled-skills/postgresql-cli/references/meta-commands-core.md +466 -0
  385. package/bundled-skills/postgresql-cli/references/meta-commands-formatting.md +154 -0
  386. package/bundled-skills/postgresql-cli/references/meta-commands-inspection.md +134 -0
  387. package/bundled-skills/postgresql-cli/references/tips-advanced.md +289 -0
  388. package/bundled-skills/postgresql-cli/references/tips-workflows.md +407 -0
  389. package/bundled-skills/postman-collection-generator/SKILL.md +184 -0
  390. package/bundled-skills/postman-newman-automation/SKILL.md +311 -0
  391. package/bundled-skills/postman-openapi-converter/SKILL.md +174 -0
  392. package/bundled-skills/power-user-cultivation/README.md +78 -0
  393. package/bundled-skills/power-user-cultivation/SKILL.md +598 -0
  394. package/bundled-skills/pricing/SKILL.md +246 -0
  395. package/bundled-skills/pricing/evals/evals.json +90 -0
  396. package/bundled-skills/pricing/references/research-methods.md +152 -0
  397. package/bundled-skills/pricing/references/tier-structure.md +232 -0
  398. package/bundled-skills/privacy-mask/SKILL.md +96 -0
  399. package/bundled-skills/product-marketing/SKILL.md +256 -0
  400. package/bundled-skills/product-marketing/evals/evals.json +85 -0
  401. package/bundled-skills/public-relations/SKILL.md +146 -0
  402. package/bundled-skills/public-relations/references/journalist-pitching.md +368 -0
  403. package/bundled-skills/public-relations/references/media-outlets.md +207 -0
  404. package/bundled-skills/public-relations/references/newsjacking.md +218 -0
  405. package/bundled-skills/public-relations/references/press-platforms.md +188 -0
  406. package/bundled-skills/puppeteer-skill/SKILL.md +143 -0
  407. package/bundled-skills/pytest-skill/SKILL.md +201 -0
  408. package/bundled-skills/rclone-cli/SKILL.md +351 -0
  409. package/bundled-skills/rclone-cli/references/bisync.md +2003 -0
  410. package/bundled-skills/rclone-cli/references/cache.md +726 -0
  411. package/bundled-skills/rclone-cli/references/chunker.md +484 -0
  412. package/bundled-skills/rclone-cli/references/combine.md +187 -0
  413. package/bundled-skills/rclone-cli/references/commands/rclone.md +1169 -0
  414. package/bundled-skills/rclone-cli/references/commands/rclone_about.md +89 -0
  415. package/bundled-skills/rclone-cli/references/commands/rclone_archive.md +49 -0
  416. package/bundled-skills/rclone-cli/references/commands/rclone_archive_create.md +97 -0
  417. package/bundled-skills/rclone-cli/references/commands/rclone_archive_extract.md +83 -0
  418. package/bundled-skills/rclone-cli/references/commands/rclone_archive_list.md +98 -0
  419. package/bundled-skills/rclone-cli/references/commands/rclone_authorize.md +53 -0
  420. package/bundled-skills/rclone-cli/references/commands/rclone_backend.md +82 -0
  421. package/bundled-skills/rclone-cli/references/commands/rclone_bisync.md +160 -0
  422. package/bundled-skills/rclone-cli/references/commands/rclone_cat.md +122 -0
  423. package/bundled-skills/rclone-cli/references/commands/rclone_check.md +134 -0
  424. package/bundled-skills/rclone-cli/references/commands/rclone_checksum.md +120 -0
  425. package/bundled-skills/rclone-cli/references/commands/rclone_cleanup.md +49 -0
  426. package/bundled-skills/rclone-cli/references/commands/rclone_completion.md +40 -0
  427. package/bundled-skills/rclone-cli/references/commands/rclone_completion_bash.md +70 -0
  428. package/bundled-skills/rclone-cli/references/commands/rclone_completion_fish.md +57 -0
  429. package/bundled-skills/rclone-cli/references/commands/rclone_completion_powershell.md +49 -0
  430. package/bundled-skills/rclone-cli/references/commands/rclone_completion_zsh.md +57 -0
  431. package/bundled-skills/rclone-cli/references/commands/rclone_config.md +56 -0
  432. package/bundled-skills/rclone-cli/references/commands/rclone_config_create.md +150 -0
  433. package/bundled-skills/rclone-cli/references/commands/rclone_config_delete.md +33 -0
  434. package/bundled-skills/rclone-cli/references/commands/rclone_config_disconnect.md +40 -0
  435. package/bundled-skills/rclone-cli/references/commands/rclone_config_dump.md +33 -0
  436. package/bundled-skills/rclone-cli/references/commands/rclone_config_edit.md +39 -0
  437. package/bundled-skills/rclone-cli/references/commands/rclone_config_encryption.md +36 -0
  438. package/bundled-skills/rclone-cli/references/commands/rclone_config_encryption_check.md +43 -0
  439. package/bundled-skills/rclone-cli/references/commands/rclone_config_encryption_remove.md +44 -0
  440. package/bundled-skills/rclone-cli/references/commands/rclone_config_encryption_set.md +54 -0
  441. package/bundled-skills/rclone-cli/references/commands/rclone_config_file.md +33 -0
  442. package/bundled-skills/rclone-cli/references/commands/rclone_config_password.md +49 -0
  443. package/bundled-skills/rclone-cli/references/commands/rclone_config_paths.md +33 -0
  444. package/bundled-skills/rclone-cli/references/commands/rclone_config_providers.md +33 -0
  445. package/bundled-skills/rclone-cli/references/commands/rclone_config_reconnect.md +40 -0
  446. package/bundled-skills/rclone-cli/references/commands/rclone_config_redacted.md +45 -0
  447. package/bundled-skills/rclone-cli/references/commands/rclone_config_show.md +33 -0
  448. package/bundled-skills/rclone-cli/references/commands/rclone_config_string.md +57 -0
  449. package/bundled-skills/rclone-cli/references/commands/rclone_config_touch.md +33 -0
  450. package/bundled-skills/rclone-cli/references/commands/rclone_config_update.md +150 -0
  451. package/bundled-skills/rclone-cli/references/commands/rclone_config_userinfo.md +38 -0
  452. package/bundled-skills/rclone-cli/references/commands/rclone_convmv.md +440 -0
  453. package/bundled-skills/rclone-cli/references/commands/rclone_copy.md +258 -0
  454. package/bundled-skills/rclone-cli/references/commands/rclone_copyto.md +219 -0
  455. package/bundled-skills/rclone-cli/references/commands/rclone_copyurl.md +91 -0
  456. package/bundled-skills/rclone-cli/references/commands/rclone_cryptcheck.md +141 -0
  457. package/bundled-skills/rclone-cli/references/commands/rclone_cryptdecode.md +51 -0
  458. package/bundled-skills/rclone-cli/references/commands/rclone_dedupe.md +166 -0
  459. package/bundled-skills/rclone-cli/references/commands/rclone_delete.md +117 -0
  460. package/bundled-skills/rclone-cli/references/commands/rclone_deletefile.md +50 -0
  461. package/bundled-skills/rclone-cli/references/commands/rclone_gendocs.md +39 -0
  462. package/bundled-skills/rclone-cli/references/commands/rclone_gitannex.md +113 -0
  463. package/bundled-skills/rclone-cli/references/commands/rclone_hashsum.md +120 -0
  464. package/bundled-skills/rclone-cli/references/commands/rclone_link.md +60 -0
  465. package/bundled-skills/rclone-cli/references/commands/rclone_listremotes.md +55 -0
  466. package/bundled-skills/rclone-cli/references/commands/rclone_ls.md +114 -0
  467. package/bundled-skills/rclone-cli/references/commands/rclone_lsd.md +127 -0
  468. package/bundled-skills/rclone-cli/references/commands/rclone_lsf.md +241 -0
  469. package/bundled-skills/rclone-cli/references/commands/rclone_lsjson.md +195 -0
  470. package/bundled-skills/rclone-cli/references/commands/rclone_lsl.md +115 -0
  471. package/bundled-skills/rclone-cli/references/commands/rclone_md5sum.md +96 -0
  472. package/bundled-skills/rclone-cli/references/commands/rclone_mkdir.md +43 -0
  473. package/bundled-skills/rclone-cli/references/commands/rclone_mount.md +1105 -0
  474. package/bundled-skills/rclone-cli/references/commands/rclone_move.md +223 -0
  475. package/bundled-skills/rclone-cli/references/commands/rclone_moveto.md +218 -0
  476. package/bundled-skills/rclone-cli/references/commands/rclone_ncdu.md +140 -0
  477. package/bundled-skills/rclone-cli/references/commands/rclone_nfsmount.md +1111 -0
  478. package/bundled-skills/rclone-cli/references/commands/rclone_obscure.md +60 -0
  479. package/bundled-skills/rclone-cli/references/commands/rclone_purge.md +58 -0
  480. package/bundled-skills/rclone-cli/references/commands/rclone_rc.md +111 -0
  481. package/bundled-skills/rclone-cli/references/commands/rclone_rcat.md +79 -0
  482. package/bundled-skills/rclone-cli/references/commands/rclone_rcd.md +219 -0
  483. package/bundled-skills/rclone-cli/references/commands/rclone_rmdir.md +52 -0
  484. package/bundled-skills/rclone-cli/references/commands/rclone_rmdirs.md +66 -0
  485. package/bundled-skills/rclone-cli/references/commands/rclone_selfupdate.md +91 -0
  486. package/bundled-skills/rclone-cli/references/commands/rclone_serve.md +61 -0
  487. package/bundled-skills/rclone-cli/references/commands/rclone_serve_dlna.md +619 -0
  488. package/bundled-skills/rclone-cli/references/commands/rclone_serve_docker.md +653 -0
  489. package/bundled-skills/rclone-cli/references/commands/rclone_serve_ftp.md +698 -0
  490. package/bundled-skills/rclone-cli/references/commands/rclone_serve_http.md +837 -0
  491. package/bundled-skills/rclone-cli/references/commands/rclone_serve_nfs.md +670 -0
  492. package/bundled-skills/rclone-cli/references/commands/rclone_serve_restic.md +246 -0
  493. package/bundled-skills/rclone-cli/references/commands/rclone_serve_s3.md +867 -0
  494. package/bundled-skills/rclone-cli/references/commands/rclone_serve_sftp.md +745 -0
  495. package/bundled-skills/rclone-cli/references/commands/rclone_serve_webdav.md +896 -0
  496. package/bundled-skills/rclone-cli/references/commands/rclone_settier.md +63 -0
  497. package/bundled-skills/rclone-cli/references/commands/rclone_sha1sum.md +99 -0
  498. package/bundled-skills/rclone-cli/references/commands/rclone_size.md +94 -0
  499. package/bundled-skills/rclone-cli/references/commands/rclone_sync.md +252 -0
  500. package/bundled-skills/rclone-cli/references/commands/rclone_test.md +51 -0
  501. package/bundled-skills/rclone-cli/references/commands/rclone_test_changenotify.md +34 -0
  502. package/bundled-skills/rclone-cli/references/commands/rclone_test_histogram.md +41 -0
  503. package/bundled-skills/rclone-cli/references/commands/rclone_test_info.md +51 -0
  504. package/bundled-skills/rclone-cli/references/commands/rclone_test_makefile.md +39 -0
  505. package/bundled-skills/rclone-cli/references/commands/rclone_test_makefiles.md +47 -0
  506. package/bundled-skills/rclone-cli/references/commands/rclone_test_memory.md +33 -0
  507. package/bundled-skills/rclone-cli/references/commands/rclone_test_speed.md +66 -0
  508. package/bundled-skills/rclone-cli/references/commands/rclone_touch.md +110 -0
  509. package/bundled-skills/rclone-cli/references/commands/rclone_tree.md +121 -0
  510. package/bundled-skills/rclone-cli/references/commands/rclone_version.md +83 -0
  511. package/bundled-skills/rclone-cli/references/crypt.md +844 -0
  512. package/bundled-skills/rclone-cli/references/docker.md +615 -0
  513. package/bundled-skills/rclone-cli/references/faq.md +364 -0
  514. package/bundled-skills/rclone-cli/references/filtering.md +991 -0
  515. package/bundled-skills/rclone-cli/references/flags.md +1221 -0
  516. package/bundled-skills/rclone-cli/references/hasher.md +383 -0
  517. package/bundled-skills/rclone-cli/references/install.md +686 -0
  518. package/bundled-skills/rclone-cli/references/overview.md +620 -0
  519. package/bundled-skills/rclone-cli/references/providers/alias.md +141 -0
  520. package/bundled-skills/rclone-cli/references/providers/archive.md +287 -0
  521. package/bundled-skills/rclone-cli/references/providers/azureblob.md +1140 -0
  522. package/bundled-skills/rclone-cli/references/providers/azurefiles.md +834 -0
  523. package/bundled-skills/rclone-cli/references/providers/b2.md +879 -0
  524. package/bundled-skills/rclone-cli/references/providers/box.md +573 -0
  525. package/bundled-skills/rclone-cli/references/providers/cloudinary.md +259 -0
  526. package/bundled-skills/rclone-cli/references/providers/compress.md +222 -0
  527. package/bundled-skills/rclone-cli/references/providers/drime.md +319 -0
  528. package/bundled-skills/rclone-cli/references/providers/drive.md +2032 -0
  529. package/bundled-skills/rclone-cli/references/providers/dropbox.md +661 -0
  530. package/bundled-skills/rclone-cli/references/providers/fichier.md +230 -0
  531. package/bundled-skills/rclone-cli/references/providers/filefabric.md +298 -0
  532. package/bundled-skills/rclone-cli/references/providers/filelu.md +256 -0
  533. package/bundled-skills/rclone-cli/references/providers/filen.md +243 -0
  534. package/bundled-skills/rclone-cli/references/providers/filescom.md +209 -0
  535. package/bundled-skills/rclone-cli/references/providers/ftp.md +621 -0
  536. package/bundled-skills/rclone-cli/references/providers/gofile.md +274 -0
  537. package/bundled-skills/rclone-cli/references/providers/googlecloudstorage.md +846 -0
  538. package/bundled-skills/rclone-cli/references/providers/googlephotos.md +676 -0
  539. package/bundled-skills/rclone-cli/references/providers/hdfs.md +263 -0
  540. package/bundled-skills/rclone-cli/references/providers/hidrive.md +487 -0
  541. package/bundled-skills/rclone-cli/references/providers/http.md +323 -0
  542. package/bundled-skills/rclone-cli/references/providers/iclouddrive.md +212 -0
  543. package/bundled-skills/rclone-cli/references/providers/internetarchive.md +355 -0
  544. package/bundled-skills/rclone-cli/references/providers/internxt.md +189 -0
  545. package/bundled-skills/rclone-cli/references/providers/jottacloud.md +604 -0
  546. package/bundled-skills/rclone-cli/references/providers/koofr.md +395 -0
  547. package/bundled-skills/rclone-cli/references/providers/linkbox.md +117 -0
  548. package/bundled-skills/rclone-cli/references/providers/local.md +749 -0
  549. package/bundled-skills/rclone-cli/references/providers/mailru.md +470 -0
  550. package/bundled-skills/rclone-cli/references/providers/mega.md +361 -0
  551. package/bundled-skills/rclone-cli/references/providers/memory.md +109 -0
  552. package/bundled-skills/rclone-cli/references/providers/netstorage.md +371 -0
  553. package/bundled-skills/rclone-cli/references/providers/onedrive.md +1322 -0
  554. package/bundled-skills/rclone-cli/references/providers/opendrive.md +222 -0
  555. package/bundled-skills/rclone-cli/references/providers/oracleobjectstorage/_index.md +932 -0
  556. package/bundled-skills/rclone-cli/references/providers/oracleobjectstorage/tutorial_mount.md +503 -0
  557. package/bundled-skills/rclone-cli/references/providers/pcloud.md +373 -0
  558. package/bundled-skills/rclone-cli/references/providers/pikpak.md +373 -0
  559. package/bundled-skills/rclone-cli/references/providers/pixeldrain.md +182 -0
  560. package/bundled-skills/rclone-cli/references/providers/premiumizeme.md +253 -0
  561. package/bundled-skills/rclone-cli/references/providers/protondrive.md +397 -0
  562. package/bundled-skills/rclone-cli/references/providers/putio.md +246 -0
  563. package/bundled-skills/rclone-cli/references/providers/qingstor.md +346 -0
  564. package/bundled-skills/rclone-cli/references/providers/quatrix.md +295 -0
  565. package/bundled-skills/rclone-cli/references/providers/s3.md +9687 -0
  566. package/bundled-skills/rclone-cli/references/providers/seafile.md +432 -0
  567. package/bundled-skills/rclone-cli/references/providers/sftp.md +1277 -0
  568. package/bundled-skills/rclone-cli/references/providers/shade.md +267 -0
  569. package/bundled-skills/rclone-cli/references/providers/sharefile.md +357 -0
  570. package/bundled-skills/rclone-cli/references/providers/sia.md +223 -0
  571. package/bundled-skills/rclone-cli/references/providers/smb.md +309 -0
  572. package/bundled-skills/rclone-cli/references/providers/storj.md +503 -0
  573. package/bundled-skills/rclone-cli/references/providers/sugarsync.md +305 -0
  574. package/bundled-skills/rclone-cli/references/providers/swift.md +744 -0
  575. package/bundled-skills/rclone-cli/references/providers/ulozto.md +283 -0
  576. package/bundled-skills/rclone-cli/references/providers/webdav.md +565 -0
  577. package/bundled-skills/rclone-cli/references/providers/yandex.md +283 -0
  578. package/bundled-skills/rclone-cli/references/providers/zoho.md +305 -0
  579. package/bundled-skills/rclone-cli/references/rc.md +2725 -0
  580. package/bundled-skills/rclone-cli/references/union.md +336 -0
  581. package/bundled-skills/rclone-cli/references/usage.md +3555 -0
  582. package/bundled-skills/rclone-cli/scripts/install.sh +204 -0
  583. package/bundled-skills/redis-cli/SKILL.md +392 -0
  584. package/bundled-skills/redis-cli/references/advanced-features.md +338 -0
  585. package/bundled-skills/redis-cli/references/connection-and-options.md +258 -0
  586. package/bundled-skills/redis-cli/references/data-query-commands.md +417 -0
  587. package/bundled-skills/redis-cli/references/inspection-and-monitoring.md +309 -0
  588. package/bundled-skills/redis-cli/references/key-management.md +252 -0
  589. package/bundled-skills/redis-cli/references/module-data-types.md +429 -0
  590. package/bundled-skills/redis-cli/references/server-administration.md +366 -0
  591. package/bundled-skills/repo-maintainer/SKILL.md +480 -0
  592. package/bundled-skills/resolving-merge-conflicts/SKILL.md +32 -0
  593. package/bundled-skills/review-and-simplify-changes/SKILL.md +202 -0
  594. package/bundled-skills/review-swarm/SKILL.md +185 -0
  595. package/bundled-skills/review-swarm/agents/openai.yaml +4 -0
  596. package/bundled-skills/riffkit/SKILL.md +122 -0
  597. package/bundled-skills/robot-framework-skill/SKILL.md +153 -0
  598. package/bundled-skills/sdk-dx/README.md +39 -0
  599. package/bundled-skills/sdk-dx/SKILL.md +541 -0
  600. package/bundled-skills/security-and-hardening/SKILL.md +474 -0
  601. package/bundled-skills/selenium-skill/SKILL.md +258 -0
  602. package/bundled-skills/shipping-and-launch/SKILL.md +323 -0
  603. package/bundled-skills/smartui-skill/SKILL.md +149 -0
  604. package/bundled-skills/source-driven-development/SKILL.md +207 -0
  605. package/bundled-skills/spec-driven-development/SKILL.md +217 -0
  606. package/bundled-skills/sql-sentinel/SKILL.md +12 -3
  607. package/bundled-skills/styleseed-design-review/SKILL.md +126 -0
  608. package/bundled-skills/supabase/CHANGELOG.md +35 -0
  609. package/bundled-skills/supabase/SKILL.md +149 -0
  610. package/bundled-skills/supabase/assets/feedback-issue-template.md +17 -0
  611. package/bundled-skills/supabase/references/skill-feedback.md +17 -0
  612. package/bundled-skills/supabase-postgres-best-practices/CHANGELOG.md +29 -0
  613. package/bundled-skills/supabase-postgres-best-practices/SKILL.md +74 -0
  614. package/bundled-skills/supabase-postgres-best-practices/references/_contributing.md +170 -0
  615. package/bundled-skills/supabase-postgres-best-practices/references/_sections.md +39 -0
  616. package/bundled-skills/supabase-postgres-best-practices/references/_template.md +34 -0
  617. package/bundled-skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
  618. package/bundled-skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
  619. package/bundled-skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
  620. package/bundled-skills/supabase-postgres-best-practices/references/conn-limits.md +44 -0
  621. package/bundled-skills/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
  622. package/bundled-skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
  623. package/bundled-skills/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
  624. package/bundled-skills/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
  625. package/bundled-skills/supabase-postgres-best-practices/references/data-pagination.md +50 -0
  626. package/bundled-skills/supabase-postgres-best-practices/references/data-upsert.md +50 -0
  627. package/bundled-skills/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
  628. package/bundled-skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
  629. package/bundled-skills/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
  630. package/bundled-skills/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
  631. package/bundled-skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
  632. package/bundled-skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
  633. package/bundled-skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
  634. package/bundled-skills/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
  635. package/bundled-skills/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
  636. package/bundled-skills/supabase-postgres-best-practices/references/query-index-types.md +48 -0
  637. package/bundled-skills/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
  638. package/bundled-skills/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
  639. package/bundled-skills/supabase-postgres-best-practices/references/schema-constraints.md +80 -0
  640. package/bundled-skills/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
  641. package/bundled-skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
  642. package/bundled-skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
  643. package/bundled-skills/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
  644. package/bundled-skills/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
  645. package/bundled-skills/supabase-postgres-best-practices/references/security-privileges.md +54 -0
  646. package/bundled-skills/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
  647. package/bundled-skills/supabase-postgres-best-practices/references/security-rls-performance.md +63 -0
  648. package/bundled-skills/swiftui-expert-skill/SKILL.md +175 -242
  649. package/bundled-skills/swiftui-expert-skill/references/accessibility-patterns.md +215 -0
  650. package/bundled-skills/swiftui-expert-skill/references/animation-advanced.md +428 -0
  651. package/bundled-skills/swiftui-expert-skill/references/animation-basics.md +284 -0
  652. package/bundled-skills/swiftui-expert-skill/references/animation-transitions.md +326 -0
  653. package/bundled-skills/swiftui-expert-skill/references/charts-accessibility.md +135 -0
  654. package/bundled-skills/swiftui-expert-skill/references/charts.md +602 -0
  655. package/bundled-skills/swiftui-expert-skill/references/focus-patterns.md +299 -0
  656. package/bundled-skills/swiftui-expert-skill/references/image-optimization.md +203 -0
  657. package/bundled-skills/swiftui-expert-skill/references/latest-apis.md +528 -0
  658. package/bundled-skills/swiftui-expert-skill/references/layout-best-practices.md +266 -0
  659. package/bundled-skills/swiftui-expert-skill/references/liquid-glass.md +423 -0
  660. package/bundled-skills/swiftui-expert-skill/references/list-patterns.md +467 -0
  661. package/bundled-skills/swiftui-expert-skill/references/localization.md +194 -0
  662. package/bundled-skills/swiftui-expert-skill/references/macos-scenes.md +318 -0
  663. package/bundled-skills/swiftui-expert-skill/references/macos-views.md +357 -0
  664. package/bundled-skills/swiftui-expert-skill/references/macos-window-styling.md +303 -0
  665. package/bundled-skills/swiftui-expert-skill/references/performance-patterns.md +417 -0
  666. package/bundled-skills/swiftui-expert-skill/references/previews.md +313 -0
  667. package/bundled-skills/swiftui-expert-skill/references/scroll-patterns.md +293 -0
  668. package/bundled-skills/swiftui-expert-skill/references/sheet-navigation-patterns.md +363 -0
  669. package/bundled-skills/swiftui-expert-skill/references/soft-deprecation.md +39 -0
  670. package/bundled-skills/swiftui-expert-skill/references/state-management.md +492 -0
  671. package/bundled-skills/swiftui-expert-skill/references/text-patterns.md +34 -0
  672. package/bundled-skills/swiftui-expert-skill/references/trace-analysis.md +295 -0
  673. package/bundled-skills/swiftui-expert-skill/references/trace-recording.md +134 -0
  674. package/bundled-skills/swiftui-expert-skill/references/view-structure.md +854 -0
  675. package/bundled-skills/swiftui-expert-skill/scripts/analyze_trace.py +301 -0
  676. package/bundled-skills/swiftui-expert-skill/scripts/instruments_parser/__init__.py +1 -0
  677. package/bundled-skills/swiftui-expert-skill/scripts/instruments_parser/causes.py +187 -0
  678. package/bundled-skills/swiftui-expert-skill/scripts/instruments_parser/correlate.py +179 -0
  679. package/bundled-skills/swiftui-expert-skill/scripts/instruments_parser/events.py +291 -0
  680. package/bundled-skills/swiftui-expert-skill/scripts/instruments_parser/hangs.py +108 -0
  681. package/bundled-skills/swiftui-expert-skill/scripts/instruments_parser/hitches.py +145 -0
  682. package/bundled-skills/swiftui-expert-skill/scripts/instruments_parser/summary.py +243 -0
  683. package/bundled-skills/swiftui-expert-skill/scripts/instruments_parser/swiftui.py +195 -0
  684. package/bundled-skills/swiftui-expert-skill/scripts/instruments_parser/time_profiler.py +135 -0
  685. package/bundled-skills/swiftui-expert-skill/scripts/instruments_parser/xctrace.py +117 -0
  686. package/bundled-skills/swiftui-expert-skill/scripts/instruments_parser/xml_utils.py +224 -0
  687. package/bundled-skills/swiftui-expert-skill/scripts/record_trace.py +252 -0
  688. package/bundled-skills/technical-tutorials/README.md +90 -0
  689. package/bundled-skills/technical-tutorials/SKILL.md +581 -0
  690. package/bundled-skills/test-framework-migration-skill/SKILL.md +122 -0
  691. package/bundled-skills/testng-skill/SKILL.md +163 -0
  692. package/bundled-skills/train-sentence-transformers/SKILL.md +118 -0
  693. package/bundled-skills/train-sentence-transformers/references/base_model_selection.md +79 -0
  694. package/bundled-skills/train-sentence-transformers/references/dataset_formats.md +128 -0
  695. package/bundled-skills/train-sentence-transformers/references/evaluators_cross_encoder.md +116 -0
  696. package/bundled-skills/train-sentence-transformers/references/evaluators_sentence_transformer.md +151 -0
  697. package/bundled-skills/train-sentence-transformers/references/evaluators_sparse_encoder.md +121 -0
  698. package/bundled-skills/train-sentence-transformers/references/hardware_guide.md +105 -0
  699. package/bundled-skills/train-sentence-transformers/references/hf_jobs_execution.md +173 -0
  700. package/bundled-skills/train-sentence-transformers/references/losses_cross_encoder.md +137 -0
  701. package/bundled-skills/train-sentence-transformers/references/losses_sentence_transformer.md +246 -0
  702. package/bundled-skills/train-sentence-transformers/references/losses_sparse_encoder.md +106 -0
  703. package/bundled-skills/train-sentence-transformers/references/model_architectures.md +178 -0
  704. package/bundled-skills/train-sentence-transformers/references/prompts_and_instructions.md +160 -0
  705. package/bundled-skills/train-sentence-transformers/references/training_args.md +269 -0
  706. package/bundled-skills/train-sentence-transformers/references/troubleshooting.md +225 -0
  707. package/bundled-skills/train-sentence-transformers/scripts/mine_hard_negatives.py +199 -0
  708. package/bundled-skills/train-sentence-transformers/scripts/train_cross_encoder_distillation_example.py +254 -0
  709. package/bundled-skills/train-sentence-transformers/scripts/train_cross_encoder_example.py +253 -0
  710. package/bundled-skills/train-sentence-transformers/scripts/train_cross_encoder_listwise_example.py +282 -0
  711. package/bundled-skills/train-sentence-transformers/scripts/train_sentence_transformer_distillation_example.py +303 -0
  712. package/bundled-skills/train-sentence-transformers/scripts/train_sentence_transformer_example.py +227 -0
  713. package/bundled-skills/train-sentence-transformers/scripts/train_sentence_transformer_make_multilingual_example.py +308 -0
  714. package/bundled-skills/train-sentence-transformers/scripts/train_sentence_transformer_matryoshka_example.py +212 -0
  715. package/bundled-skills/train-sentence-transformers/scripts/train_sentence_transformer_multi_dataset_example.py +258 -0
  716. package/bundled-skills/train-sentence-transformers/scripts/train_sentence_transformer_static_embedding_example.py +273 -0
  717. package/bundled-skills/train-sentence-transformers/scripts/train_sentence_transformer_with_lora_example.py +275 -0
  718. package/bundled-skills/train-sentence-transformers/scripts/train_sparse_encoder_distillation_example.py +262 -0
  719. package/bundled-skills/train-sentence-transformers/scripts/train_sparse_encoder_example.py +237 -0
  720. package/bundled-skills/transformers-js/SKILL.md +83 -29
  721. package/bundled-skills/transformers-js/references/CONFIGURATION.md +55 -7
  722. package/bundled-skills/transformers-js/references/EXAMPLES.md +98 -83
  723. package/bundled-skills/transformers-js/references/MODEL_REGISTRY.md +197 -0
  724. package/bundled-skills/transformers-js/references/PIPELINE_OPTIONS.md +31 -19
  725. package/bundled-skills/transformers-js/references/TEXT_GENERATION.md +18 -18
  726. package/bundled-skills/trl-training/SKILL.md +327 -0
  727. package/bundled-skills/tune-monitor/SKILL.md +268 -0
  728. package/bundled-skills/ui-a11y/SKILL.md +76 -68
  729. package/bundled-skills/ui-component/SKILL.md +54 -82
  730. package/bundled-skills/ui-lint/SKILL.md +111 -0
  731. package/bundled-skills/ui-motion/SKILL.md +181 -0
  732. package/bundled-skills/ui-page/SKILL.md +80 -90
  733. package/bundled-skills/ui-pattern/SKILL.md +50 -68
  734. package/bundled-skills/ui-review/SKILL.md +95 -77
  735. package/bundled-skills/ui-score/SKILL.md +145 -0
  736. package/bundled-skills/ui-setup/SKILL.md +196 -88
  737. package/bundled-skills/ui-skills-root/SKILL.md +72 -0
  738. package/bundled-skills/ui-tokens/SKILL.md +44 -52
  739. package/bundled-skills/ui-update/SKILL.md +167 -0
  740. package/bundled-skills/unslop-commit/SKILL.md +113 -0
  741. package/bundled-skills/unslop-file/SKILL.md +157 -0
  742. package/bundled-skills/unslop-review/SKILL.md +102 -0
  743. package/bundled-skills/update-swiftui-apis/SKILL.md +120 -0
  744. package/bundled-skills/update-swiftui-apis/references/scan-manifest.md +230 -0
  745. package/bundled-skills/upgrading-expo/SKILL.md +107 -82
  746. package/bundled-skills/upgrading-expo/agents/openai.yaml +4 -0
  747. package/bundled-skills/upgrading-expo/references/expo-av-to-audio.md +132 -0
  748. package/bundled-skills/upgrading-expo/references/expo-av-to-video.md +160 -0
  749. package/bundled-skills/upgrading-expo/references/native-tabs.md +124 -0
  750. package/bundled-skills/upgrading-expo/references/new-architecture.md +79 -0
  751. package/bundled-skills/upgrading-expo/references/react-19.md +79 -0
  752. package/bundled-skills/upgrading-expo/references/react-compiler.md +59 -0
  753. package/bundled-skills/upgrading-expo/references/react-navigation-to-expo-router.md +61 -0
  754. package/bundled-skills/usage-based-pricing/README.md +40 -0
  755. package/bundled-skills/usage-based-pricing/SKILL.md +547 -0
  756. package/bundled-skills/use-dom/SKILL.md +428 -0
  757. package/bundled-skills/use-dom/agents/openai.yaml +4 -0
  758. package/bundled-skills/ux-audit/SKILL.md +112 -44
  759. package/bundled-skills/ux-copy/SKILL.md +105 -73
  760. package/bundled-skills/ux-feedback/SKILL.md +106 -58
  761. package/bundled-skills/ux-flow/SKILL.md +51 -50
  762. package/bundled-skills/vitest-skill/SKILL.md +165 -0
  763. package/bundled-skills/weaviate/references/environment_requirements.md +4 -1
  764. package/bundled-skills/weaviate/scripts/weaviate_conn.py +51 -17
  765. package/bundled-skills/webdriverio-skill/SKILL.md +157 -0
  766. package/bundled-skills/wjttc-builder/SKILL.md +355 -0
  767. package/bundled-skills/wjttc-tester/SKILL.md +190 -0
  768. package/bundled-skills/youtube-notetaker/scripts/serve.py +20 -11
  769. package/package.json +1 -1
  770. package/skills_index.json +4404 -146
@@ -0,0 +1,467 @@
1
+ # SwiftUI List Patterns Reference
2
+
3
+ ## Table of Contents
4
+
5
+ - [ForEach Identity and Stability](#foreach-identity-and-stability)
6
+ - [Enumerated Sequences](#enumerated-sequences)
7
+ - [List with Custom Styling](#list-with-custom-styling)
8
+ - [List with Pull-to-Refresh](#list-with-pull-to-refresh)
9
+ - [Empty States with ContentUnavailableView (iOS 17+)](#empty-states-with-contentunavailableview-ios-17)
10
+ - [Custom List Backgrounds](#custom-list-backgrounds)
11
+ - [Table](#table)
12
+ - [Summary Checklist](#summary-checklist)
13
+
14
+ ## ForEach Identity and Stability
15
+
16
+ **Always provide stable identity for `ForEach`.** Never use `.indices` for dynamic content.
17
+
18
+ ```swift
19
+ // Good - stable identity via Identifiable
20
+ extension User: Identifiable {
21
+ var id: String { userId }
22
+ }
23
+
24
+ ForEach(users) { user in
25
+ UserRow(user: user)
26
+ }
27
+
28
+ // Good - stable identity via keypath
29
+ ForEach(users, id: \.userId) { user in
30
+ UserRow(user: user)
31
+ }
32
+
33
+ // Wrong - indices create static content
34
+ ForEach(users.indices, id: \.self) { index in
35
+ UserRow(user: users[index]) // Can crash on removal!
36
+ }
37
+
38
+ // Wrong - unstable identity
39
+ ForEach(users, id: \.self) { user in
40
+ UserRow(user: user) // Only works if User is Hashable and stable
41
+ }
42
+ ```
43
+
44
+ **Critical**: Ensure **constant number of views per element** in `ForEach`:
45
+
46
+ ```swift
47
+ // Good - consistent view count
48
+ ForEach(items) { item in
49
+ ItemRow(item: item)
50
+ }
51
+
52
+ // Bad - variable view count breaks identity
53
+ ForEach(items) { item in
54
+ if item.isSpecial {
55
+ SpecialRow(item: item)
56
+ DetailRow(item: item)
57
+ } else {
58
+ RegularRow(item: item)
59
+ }
60
+ }
61
+ ```
62
+
63
+ **Avoid inline filtering:**
64
+
65
+ ```swift
66
+ // Bad - unstable identity, changes on every update
67
+ ForEach(items.filter { $0.isEnabled }) { item in
68
+ ItemRow(item: item)
69
+ }
70
+
71
+ // Good - prefilter and cache
72
+ @State private var enabledItems: [Item] = []
73
+
74
+ var body: some View {
75
+ ForEach(enabledItems) { item in
76
+ ItemRow(item: item)
77
+ }
78
+ .onChange(of: items) { _, newItems in
79
+ enabledItems = newItems.filter { $0.isEnabled }
80
+ }
81
+ }
82
+ ```
83
+
84
+ **Avoid `AnyView` in list rows:**
85
+
86
+ ```swift
87
+ // Bad - hides identity, increases cost
88
+ ForEach(items) { item in
89
+ AnyView(item.isSpecial ? SpecialRow(item: item) : RegularRow(item: item))
90
+ }
91
+
92
+ // Good - Create a unified row view with a single top-level container
93
+ ForEach(items) { item in
94
+ ItemRow(item: item)
95
+ }
96
+
97
+ struct ItemRow: View {
98
+ let item: Item
99
+
100
+ var body: some View {
101
+ // The VStack keeps the row "unary" (one top-level view) so the
102
+ // List can template row ids without evaluating every row's body.
103
+ VStack {
104
+ if item.isSpecial {
105
+ SpecialRow(item: item)
106
+ } else {
107
+ RegularRow(item: item)
108
+ }
109
+ }
110
+ }
111
+ }
112
+ ```
113
+
114
+ **Why**: Stable identity is critical for performance and animations. Unstable identity causes excessive diffing, broken animations, and potential crashes.
115
+
116
+ ### Prefer unary rows in `List`
117
+
118
+ `List` needs the identity of every row up front. When each row's body produces a **single top-level view** (a "unary" row), SwiftUI can template the row id from the `ForEach` element's id alone, without running each row's `body`. When the body branches between different top-level shapes — a bare top-level `switch`, a top-level `if` without `else`, or an `AnyView` — structural identity varies per row, so SwiftUI falls back to evaluating every row's body just to compute ids. That cost scales with the number of rows.
119
+
120
+ The fix is to wrap branching content in any single-root container (`VStack`, `HStack`, `ZStack`, or a custom wrapper) so the row is always exactly one top-level view, as shown above. A top-level `if` without an `else` is also "multi" (0 or 1 views); if some elements shouldn't be rows at all, filter the collection before it reaches the `ForEach` rather than producing a zero-view row.
121
+
122
+ To find non-constant row builders in an existing app, launch with `-LogForEachSlowPath YES`; SwiftUI logs each `ForEach` inside a lazy container whose row body produces a non-constant number of views.
123
+
124
+ ### Keep ids stable, unique, and cheap
125
+
126
+ Three more identity rules that prevent subtle bugs:
127
+
128
+ - **The id must outlive the view and not change on edit.** Don't derive `id` from a mutable property (e.g. `var id: String { title }`). Editing the title changes the id, so SwiftUI treats it as a removal plus insertion — focus and per-row state are lost mid-edit. Use a stable `let id: UUID` or a server-assigned key.
129
+ - **Don't synthesize a fresh id inside `body`.** `ForEach(items.map { Item(title: $0) })` creates new `UUID`s on every body pass, so the whole collection reads as replaced every update. Create ids once in storage that outlives `body` (the model layer), not inline.
130
+ - **Keep the id cheap to hash.** Avoid `id: \.self` on a large `Hashable` struct; hashing walks every field on every diff. Use a small primitive (`UUID`, `Int`, short `String`, `URL`) and still pass the full element to the row.
131
+
132
+ ### Identifiable ID Must Be Truly Unique
133
+
134
+ Non-unique IDs cause SwiftUI to treat different items as identical, leading to duplicate rendering or missing views:
135
+
136
+ ```swift
137
+ // Bug -- two articles with the same URL show identical content
138
+ struct Article: Identifiable {
139
+ let title: String
140
+ let url: URL
141
+ var id: String { url.absoluteString } // Not unique if URLs repeat!
142
+ }
143
+
144
+ // Fix -- use a genuinely unique identifier
145
+ struct Article: Identifiable {
146
+ let id: UUID
147
+ let title: String
148
+ let url: URL
149
+ }
150
+ ```
151
+
152
+ **Classes get a default `ObjectIdentifier`-based `id`** when conforming to `Identifiable` without providing one. This is only unique for the object's lifetime and can be recycled after deallocation.
153
+
154
+ ## Enumerated Sequences
155
+
156
+ **Using `.enumerated()` is fine; the index just must not be the identity.** Using `\.offset` as the id is the same anti-pattern as `\.self` on `items.indices` — the id becomes the position, not the element, so inserts and reorders reset row state and break animations. Keep the element's own identity as the id and treat the index as ordinary row data.
157
+
158
+ ```swift
159
+ // Wrong - offset is the position, not the element
160
+ ForEach(items.enumerated(), id: \.offset) { index, item in
161
+ ItemRow(number: index + 1, item: item)
162
+ }
163
+
164
+ // Correct - id comes from the element; index is just data
165
+ ForEach(items.enumerated(), id: \.element.id) { index, item in
166
+ ItemRow(number: index + 1, item: item)
167
+ }
168
+ ```
169
+
170
+ **No `Array(...)` wrapper is needed on Swift 6.1+.** As of Swift 6.1, the sequence returned by `.enumerated()` conditionally conforms to `RandomAccessCollection` when the base collection does, so `ForEach` accepts it directly. On earlier toolchains, wrap it in `Array(...)`. Favor the direct form in new code — it avoids an eager copy on every body evaluation.
171
+
172
+ ## List with Custom Styling
173
+
174
+ ```swift
175
+ // Remove default background and separators
176
+ List(items) { item in
177
+ ItemRow(item: item)
178
+ .listRowInsets(EdgeInsets(top: 8, leading: 16, bottom: 8, trailing: 16))
179
+ .listRowSeparator(.hidden)
180
+ }
181
+ .listStyle(.plain)
182
+ .scrollContentBackground(.hidden)
183
+ .background(Color.customBackground)
184
+ .environment(\.defaultMinListRowHeight, 1) // Allows custom row heights
185
+ ```
186
+
187
+ ## List with Pull-to-Refresh
188
+
189
+ ```swift
190
+ List(items) { item in
191
+ ItemRow(item: item)
192
+ }
193
+ .refreshable {
194
+ await loadItems()
195
+ }
196
+ ```
197
+
198
+ ## Empty States with ContentUnavailableView (iOS 17+)
199
+
200
+ Use `ContentUnavailableView` for empty list/search states. The built-in `.search` variant is auto-localized:
201
+
202
+ ```swift
203
+ List {
204
+ ForEach(searchResults) { item in
205
+ ItemRow(item: item)
206
+ }
207
+ }
208
+ .overlay {
209
+ if searchResults.isEmpty, !searchText.isEmpty {
210
+ ContentUnavailableView.search(text: searchText)
211
+ }
212
+ }
213
+ ```
214
+
215
+ For non-search empty states, use a custom instance:
216
+
217
+ ```swift
218
+ ContentUnavailableView(
219
+ "No Articles",
220
+ systemImage: "doc.richtext.fill",
221
+ description: Text("Articles you save will appear here.")
222
+ )
223
+ ```
224
+
225
+ ## Custom List Backgrounds
226
+
227
+ Use `.scrollContentBackground(.hidden)` to replace the default list background:
228
+
229
+ ```swift
230
+ List(items) { item in
231
+ ItemRow(item: item)
232
+ }
233
+ .scrollContentBackground(.hidden)
234
+ .background(Color.customBackground)
235
+ ```
236
+
237
+ Without `.scrollContentBackground(.hidden)`, a custom `.background()` has no visible effect on `List`.
238
+
239
+ ## Table
240
+
241
+ > **Availability:** iOS 16.0+, iPadOS 16.0+, visionOS 1.0+
242
+
243
+ A multi-column data container that presents rows of `Identifiable` data with sortable, selectable columns. On compact size classes (iPhone, iPad Slide Over), columns after the first are automatically hidden.
244
+
245
+ ### Basic Table
246
+
247
+ ```swift
248
+ struct Person: Identifiable {
249
+ let givenName: String
250
+ let familyName: String
251
+ let emailAddress: String
252
+ let id = UUID()
253
+ var fullName: String { givenName + " " + familyName }
254
+ }
255
+
256
+ struct PeopleTable: View {
257
+ @State private var people: [Person] = [ /* ... */ ]
258
+
259
+ var body: some View {
260
+ Table(people) {
261
+ TableColumn("Given Name", value: \.givenName)
262
+ TableColumn("Family Name", value: \.familyName)
263
+ TableColumn("E-Mail Address", value: \.emailAddress)
264
+ }
265
+ }
266
+ }
267
+ ```
268
+
269
+ ### Table with Selection
270
+
271
+ Bind to a single `ID` for single-selection, or a `Set<ID>` for multi-selection:
272
+
273
+ ```swift
274
+ struct SelectableTable: View {
275
+ @State private var people: [Person] = [ /* ... */ ]
276
+ @State private var selectedPeople = Set<Person.ID>()
277
+
278
+ var body: some View {
279
+ Table(people, selection: $selectedPeople) {
280
+ TableColumn("Given Name", value: \.givenName)
281
+ TableColumn("Family Name", value: \.familyName)
282
+ TableColumn("E-Mail Address", value: \.emailAddress)
283
+ }
284
+ Text("\(selectedPeople.count) people selected")
285
+ }
286
+ }
287
+ ```
288
+
289
+ ### Sortable Table
290
+
291
+ Provide a binding to `[KeyPathComparator]` and re-sort the data in `.onChange(of:)`:
292
+
293
+ ```swift
294
+ struct SortableTable: View {
295
+ @State private var people: [Person] = [ /* ... */ ]
296
+ @State private var sortOrder = [KeyPathComparator(\Person.givenName)]
297
+
298
+ var body: some View {
299
+ Table(people, sortOrder: $sortOrder) {
300
+ TableColumn("Given Name", value: \.givenName)
301
+ TableColumn("Family Name", value: \.familyName)
302
+ TableColumn("E-Mail Address", value: \.emailAddress)
303
+ }
304
+ .onChange(of: sortOrder) { _, newOrder in
305
+ people.sort(using: newOrder)
306
+ }
307
+ }
308
+ }
309
+ ```
310
+
311
+ **Important:** The table does **not** sort data itself — you must re-sort the collection when `sortOrder` changes.
312
+
313
+ ### Adaptive Table for Compact Size Classes
314
+
315
+ On iPhone or iPad in Slide Over, only the first column is shown. Customize it to display combined information:
316
+
317
+ ```swift
318
+ struct AdaptiveTable: View {
319
+ @Environment(\.horizontalSizeClass) private var horizontalSizeClass
320
+ private var isCompact: Bool { horizontalSizeClass == .compact }
321
+
322
+ @State private var people: [Person] = [ /* ... */ ]
323
+ @State private var sortOrder = [KeyPathComparator(\Person.givenName)]
324
+
325
+ var body: some View {
326
+ Table(people, sortOrder: $sortOrder) {
327
+ TableColumn("Given Name", value: \.givenName) { person in
328
+ VStack(alignment: .leading) {
329
+ Text(isCompact ? person.fullName : person.givenName)
330
+ if isCompact {
331
+ Text(person.emailAddress)
332
+ .foregroundStyle(.secondary)
333
+ }
334
+ }
335
+ }
336
+ TableColumn("Family Name", value: \.familyName)
337
+ TableColumn("E-Mail Address", value: \.emailAddress)
338
+ }
339
+ .onChange(of: sortOrder) { _, newOrder in
340
+ people.sort(using: newOrder)
341
+ }
342
+ }
343
+ }
344
+ ```
345
+
346
+ ### Table with Static Rows
347
+
348
+ Use `init(of:columns:rows:)` when rows are known at compile time:
349
+
350
+ ```swift
351
+ struct Purchase: Identifiable {
352
+ let price: Decimal
353
+ let id = UUID()
354
+ }
355
+
356
+ struct TipTable: View {
357
+ let currencyStyle = Decimal.FormatStyle.Currency(code: "USD")
358
+
359
+ var body: some View {
360
+ Table(of: Purchase.self) {
361
+ TableColumn("Base price") { purchase in
362
+ Text(purchase.price, format: currencyStyle)
363
+ }
364
+ TableColumn("With 15% tip") { purchase in
365
+ Text(purchase.price * 1.15, format: currencyStyle)
366
+ }
367
+ TableColumn("With 20% tip") { purchase in
368
+ Text(purchase.price * 1.2, format: currencyStyle)
369
+ }
370
+ } rows: {
371
+ TableRow(Purchase(price: 20))
372
+ TableRow(Purchase(price: 50))
373
+ TableRow(Purchase(price: 75))
374
+ }
375
+ }
376
+ }
377
+ ```
378
+
379
+ ### Table with Dynamic Number of Columns
380
+
381
+ > **Availability:** iOS 17.4+, iPadOS 17.4+, Mac Catalyst 17.4+, macOS 14.4+, visionOS 1.1+
382
+
383
+ If the number of columns is not known at runtime use `TableColumnForEach` to create columns based on a `RandomAccessCollection` of some data type. Either the collection’s elements must conform to `Identifiable` or you need to provide an id parameter to the `TableColumnForEach` initializer.
384
+
385
+ This can be mixed with static compile time known `TableColumn` usage.
386
+
387
+ ```swift
388
+ struct AudioChannel: Identifiable {
389
+ let name: String
390
+ let id: UUID
391
+ }
392
+
393
+ struct AudioSample: Identifiable {
394
+ let id: UUID
395
+ let timestamp: TimeInterval
396
+ func level(channel: AudioChannel.ID) -> Double {
397
+ 1
398
+ }
399
+ }
400
+
401
+ @Observable
402
+ class AudioSampleTrack {
403
+ let channels: [AudioChannel]
404
+ var samples: [AudioSample]
405
+ }
406
+
407
+ struct ContentView: View {
408
+ var track: AudioSampleTrack
409
+
410
+ var body: some View {
411
+ Table(track.samples) {
412
+ TableColumn("Timestamp (ms)") { sample in
413
+ Text(sample.timestamp, format: .number.scale(1000))
414
+ .monospacedDigit()
415
+ }
416
+ TableColumnForEach(track.channels) { channel in
417
+ TableColumn(channel.name) { sample in
418
+ Text(sample.level(channel: channel.id),
419
+ format: .number.precision(.fractionLength(2))
420
+ )
421
+ .monospacedDigit()
422
+ }
423
+ .width(ideal: 70)
424
+ .alignment(.numeric)
425
+ }
426
+ }
427
+ }
428
+ }
429
+ ```
430
+
431
+ ### Table Styles
432
+
433
+ ```swift
434
+ // Inset (no borders)
435
+ Table(people) { /* columns */ }
436
+ .tableStyle(.inset)
437
+
438
+ // Hide column headers
439
+ Table(people) { /* columns */ }
440
+ .tableColumnHeaders(.hidden)
441
+ ```
442
+
443
+ ### Platform Behavior
444
+
445
+ | Platform | Behavior |
446
+ |----------|----------|
447
+ | **iPadOS (regular)** | Full multi-column layout; headers and all columns visible |
448
+ | **iPadOS (compact)** | Only the first column shown; headers hidden |
449
+ | **iPhone (all sizes)** | Only the first column shown; headers hidden; list-like appearance |
450
+
451
+ > **Best Practice:** Prefer handling the compact size class by showing combined info in the first column. This provides a seamless transition when the size class changes (e.g., entering/exiting Slide Over on iPad).
452
+
453
+ ## Summary Checklist
454
+
455
+ - [ ] ForEach uses stable identity (never `.indices` or `\.offset` for dynamic content)
456
+ - [ ] Identifiable IDs are truly unique across all items
457
+ - [ ] id is stable across edits (not derived from a mutable property), created outside `body`, and cheap to hash
458
+ - [ ] Constant number of views per ForEach element; rows are unary (single top-level view)
459
+ - [ ] No inline filtering in ForEach (prefilter and cache instead)
460
+ - [ ] No `AnyView` in list rows
461
+ - [ ] `.enumerated()` uses the element's id (not `\.offset`); no `Array(...)` wrapper needed on Swift 6.1+
462
+ - [ ] Use `.refreshable` for pull-to-refresh
463
+ - [ ] Use `ContentUnavailableView` for empty states (iOS 17+)
464
+ - [ ] Use `.scrollContentBackground(.hidden)` for custom list backgrounds
465
+ - [ ] `Table` adapts for compact size classes (first column shows combined info)
466
+ - [ ] `Table` sorting re-sorts data in `.onChange(of: sortOrder)` (table doesn't sort itself)
467
+ - [ ] `Table` data conforms to `Identifiable`
@@ -0,0 +1,194 @@
1
+ # SwiftUI Localization Reference
2
+
3
+ Guidance for user-facing text: `Text`, `Button`, `Label`, navigation/toolbar titles, alerts, and types that carry localizable strings. For the narrower "verbatim vs localized" decision on a single `Text`, see `references/text-patterns.md`.
4
+
5
+ ## Table of Contents
6
+
7
+ - [SwiftUI Localizes String Literals Automatically](#swiftui-localizes-string-literals-automatically)
8
+ - [String Catalogs](#string-catalogs)
9
+ - [Bundle for Swift Packages and Frameworks](#bundle-for-swift-packages-and-frameworks)
10
+ - [Localizing Variables and Custom Types](#localizing-variables-and-custom-types)
11
+ - [LocalizedStringResource for Non-View Types](#localizedstringresource-for-non-view-types)
12
+ - [Interpolation vs Concatenation](#interpolation-vs-concatenation)
13
+ - [Casing](#casing)
14
+ - [Formatting Dates, Numbers, and Currencies](#formatting-dates-numbers-and-currencies)
15
+ - [Layout for Localization](#layout-for-localization)
16
+ - [Reading the Current Locale](#reading-the-current-locale)
17
+ - [String(localized:) Outside SwiftUI Views](#stringlocalized-outside-swiftui-views)
18
+ - [Comments for Translators](#comments-for-translators)
19
+
20
+ ## SwiftUI Localizes String Literals Automatically
21
+
22
+ Initializers that accept `LocalizedStringKey` (`Text`, `Button`, `Label`, `.navigationTitle`, alert titles, and so on) treat string literals as localization keys automatically. Do not wrap literals in `NSLocalizedString`, `String(localized:)`, or `LocalizedStringResource` — that resolves the string eagerly and ignores `\.locale` overrides.
23
+
24
+ ```swift
25
+ // AVOID: double work, and resolves eagerly
26
+ Text(String(localized: "start_workout"))
27
+
28
+ // PREFER: pass the literal directly
29
+ Text("start_workout")
30
+ ```
31
+
32
+ Both opaque keys (`"start_workout"`) and natural-language strings (`"Start Workout"`) work as keys — pick whichever convention the project already uses. Use `Text(verbatim:)` only to opt a literal out of localization (e.g. a debug label interpolating a runtime value). When the argument is already a `String` variable, `Text(value)` calls the `StringProtocol` overload and skips localization on its own.
33
+
34
+ ## String Catalogs
35
+
36
+ Most projects localize through String Catalogs (`.xcstrings`). Each build syncs new keys from code into the catalog, but the catalog file must already exist — Xcode doesn't create one automatically. If a project already uses `.strings` / `.stringsdict`, add new strings there rather than migrating. Route groups of strings to a specific catalog with `tableName:`.
37
+
38
+ ```swift
39
+ Text("Explore", tableName: "Navigation",
40
+ comment: "Tab bar item title for the Explore screen.")
41
+ ```
42
+
43
+ ## Bundle for Swift Packages and Frameworks
44
+
45
+ Apps, app extensions, and XPC services are their own main bundle, so `bundle` can be omitted. Frameworks and Swift packages need an explicit `bundle:` — without one, SwiftUI looks up strings in `Bundle.main`, the lookup fails silently, and the string appears unlocalized at runtime.
46
+
47
+ ```swift
48
+ // AVOID (inside a framework/package): searches the app's catalog
49
+ Text("Save to Favorites")
50
+
51
+ // PREFER: #bundle resolves to the current target's bundle
52
+ Text("Save to Favorites", bundle: #bundle,
53
+ comment: "Button to bookmark a recipe.")
54
+ ```
55
+
56
+ `#bundle` is the preferred form; `Bundle.module` and `Bundle(for:)` still work but are older patterns.
57
+
58
+ ## Localizing Variables and Custom Types
59
+
60
+ A `String` variable passed to `Text` runs the `StringProtocol` overload and is **not** localized. Wrapping it in `LocalizedStringKey(_:)` doesn't help — Xcode can't extract a literal from a runtime value, so nothing lands in the catalog. To localize a value chosen from a known set, model it with a type that exposes `LocalizedStringResource`:
61
+
62
+ ```swift
63
+ enum Category {
64
+ case appetizers, mains, desserts
65
+ var name: LocalizedStringResource {
66
+ switch self {
67
+ case .appetizers: "Appetizers"
68
+ case .mains: "Mains"
69
+ case .desserts: "Desserts"
70
+ }
71
+ }
72
+ }
73
+
74
+ Text(category.name)
75
+ ```
76
+
77
+ When a view or model exposes user-facing text, type the property as `LocalizedStringKey` or `LocalizedStringResource` rather than `String`. Every SwiftUI view that takes localized text accepts both, so deferring resolution costs nothing at the display site and preserves locale/bundle context.
78
+
79
+ ## LocalizedStringResource for Non-View Types
80
+
81
+ When a non-view type carries user-facing text — a model object, a tip, a queued notification — use `LocalizedStringResource` instead of `String`. It defers resolution to display time, so it honors the locale active when the value actually renders, not when it was created.
82
+
83
+ ```swift
84
+ // AVOID: resolved at creation time, can't re-render in another locale
85
+ struct Tip { let headline: String }
86
+ let tip = Tip(headline: String(localized: "Tip of the Day"))
87
+
88
+ // PREFER: resolution deferred to display time
89
+ struct Tip { let headline: LocalizedStringResource }
90
+ let tip = Tip(headline: "Tip of the Day")
91
+ ```
92
+
93
+ Apply this when designing new types or changing user-facing text — don't sweep through existing `String` properties as part of unrelated edits.
94
+
95
+ ## Interpolation vs Concatenation
96
+
97
+ String interpolation preserves `LocalizedStringKey` and produces a format string in the catalog (e.g. `"Welcome, %@"`). Concatenation with `+` produces a plain `String` and is not localized. Never glue separately localized fragments into a sentence — word order varies across languages.
98
+
99
+ ```swift
100
+ // AVOID: + produces String; sentence assembly breaks word order
101
+ Text("Error: " + statusMessage)
102
+ Text(String(localized: "Created by")) + Text(" ") + Text(authorName)
103
+
104
+ // PREFER: one interpolated string translators can rearrange
105
+ Text("Error: \(statusMessage)")
106
+ Text("Created by \(authorName)")
107
+ ```
108
+
109
+ ## Casing
110
+
111
+ Bake the desired case into the string rather than transforming at runtime via `.textCase(_:)`, `.localizedUppercase`, or `.localizedCapitalized`. A runtime transform forces the same casing on every translation, leaving translators no room to adjust per language.
112
+
113
+ ```swift
114
+ // AVOID
115
+ Text("Section Header").textCase(.uppercase)
116
+
117
+ // PREFER
118
+ Text("SECTION HEADER")
119
+ ```
120
+
121
+ This applies to localized strings; display user-entered text as-is. If a transform is unavoidable, prefer `.localizedUppercase` / `.localizedCapitalized`, which honor the user's locale.
122
+
123
+ ## Formatting Dates, Numbers, and Currencies
124
+
125
+ Use `Text`'s `format:` parameter or `.formatted()` instead of `DateFormatter` / `NumberFormatter` with hardcoded format strings. Format styles adapt to the user's locale; hardcoded format strings don't.
126
+
127
+ ```swift
128
+ // AVOID
129
+ let f = DateFormatter(); f.dateFormat = "MM/dd/yyyy"
130
+ Text(f.string(from: workout.date))
131
+ Text("$\(product.price, specifier: "%.2f")")
132
+
133
+ // PREFER
134
+ Text(workout.date, format: .dateTime.month().day().year())
135
+ Text(product.price, format: .currency(code: store.currencyCode))
136
+ ```
137
+
138
+ Field components (`.month()`, `.day()`) choose which fields appear; the locale decides the order. For lists, `Array.formatted()` inserts locale-correct separators and conjunctions instead of `joined(separator:)`. When `DateFormatter` is genuinely unavoidable, use `setLocalizedDateFormatFromTemplate(_:)` rather than assigning `dateFormat`.
139
+
140
+ ## Layout for Localization
141
+
142
+ - Use `.leading` / `.trailing` instead of `.left` / `.right` — they flip for right-to-left locales.
143
+ - Don't hardcode frame widths/heights for text; translations vary in length and scripts vary in height. Use `ViewThatFits` when a layout might not fit longer translations.
144
+ - Use text styles (`.body`, `.headline`) rather than fixed point sizes, so line height adapts per script.
145
+
146
+ ```swift
147
+ // PREFER
148
+ Text(recipe.title)
149
+ .frame(maxWidth: .infinity, alignment: .leading)
150
+
151
+ ViewThatFits {
152
+ HStack { actionButtons }
153
+ VStack { actionButtons }
154
+ }
155
+ ```
156
+
157
+ ## Reading the Current Locale
158
+
159
+ Use `@Environment(\.locale)` for locale-dependent logic in views, not `Locale.current` — the environment respects preview overrides and per-view injection.
160
+
161
+ ## String(localized:) Outside SwiftUI Views
162
+
163
+ When you need a localized `String` outside a view, use `String(localized:)`, not `NSLocalizedString`. Don't interpolate inside `NSLocalizedString` — Xcode extracts keys from literals at build time and can't extract interpolated values. `String(localized:)` supports interpolation (it extracts the format string and treats values as runtime arguments) and is preferred over `String(format:)`, which always renders digits as 0–9 regardless of locale.
164
+
165
+ ```swift
166
+ // PREFER
167
+ let title = String(localized: "activity_summary", comment: "Dashboard header")
168
+ ```
169
+
170
+ ## Comments for Translators
171
+
172
+ Add a `comment:` describing the UI element and its purpose, especially for ambiguous strings. For interpolated strings, describe each placeholder by position — translators don't see Swift variable names. Comments can live at the call site or in the String Catalog's per-string Comment field; keep one source of truth per string.
173
+
174
+ ```swift
175
+ // AVOID: "Edit" could be a noun or a verb
176
+ Text("Edit")
177
+
178
+ // PREFER
179
+ Text("Edit", comment: "Toolbar button that enters editing mode for the list.")
180
+ Text("Completed \(count) of \(total)",
181
+ comment: "Progress label — first variable is finished items, second is the total.")
182
+ ```
183
+
184
+ ## Summary Checklist
185
+
186
+ - [ ] String literals passed directly to `Text`/`Button`/`Label` (not wrapped in `NSLocalizedString`/`String(localized:)`)
187
+ - [ ] `bundle: #bundle` on user-facing strings inside frameworks and Swift packages
188
+ - [ ] User-facing text on models/non-view types typed as `LocalizedStringResource`, not `String`
189
+ - [ ] Interpolation (not `+`) for dynamic strings; no sentence assembly from fragments
190
+ - [ ] Case baked into the string, not applied via `.textCase`
191
+ - [ ] Dates/numbers/currencies use `format:` / `.formatted()` with locale-aware styles
192
+ - [ ] `.leading`/`.trailing` (not `.left`/`.right`); no hardcoded text frame sizes
193
+ - [ ] `@Environment(\.locale)` for locale logic in views
194
+ - [ ] `comment:` provided for ambiguous strings and interpolated placeholders