@mmerterden/multi-agent-pipeline 20.7.0 → 20.8.1

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 (284) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/LICENSE +0 -10
  3. package/docs/facts.json +1 -1
  4. package/manifest.json +285 -285
  5. package/package.json +3 -3
  6. package/pipeline/lib/redact.mjs +3 -2
  7. package/pipeline/scripts/_notices.mjs +1 -1
  8. package/pipeline/scripts/gen-skills-index.mjs +13 -1
  9. package/pipeline/scripts/pre-commit-check.sh +4 -0
  10. package/pipeline/skills/.skill-manifest.json +69 -69
  11. package/pipeline/skills/shared/README.md +70 -70
  12. package/pipeline/skills/shared/external/alarmkit/SKILL.md +373 -381
  13. package/pipeline/skills/shared/external/alarmkit/evals/evals.json +23 -18
  14. package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +328 -378
  15. package/pipeline/skills/shared/external/app-clips/SKILL.md +260 -160
  16. package/pipeline/skills/shared/external/app-clips/evals/evals.json +27 -27
  17. package/pipeline/skills/shared/external/app-clips/references/data-handoff-notifications-location.md +150 -83
  18. package/pipeline/skills/shared/external/app-clips/references/routing-and-experiences.md +135 -83
  19. package/pipeline/skills/shared/external/app-clips/references/size-capabilities-and-promotion.md +143 -85
  20. package/pipeline/skills/shared/external/app-intents/SKILL.md +302 -304
  21. package/pipeline/skills/shared/external/app-intents/evals/evals.json +21 -21
  22. package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +594 -894
  23. package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +345 -277
  24. package/pipeline/skills/shared/external/app-store-optimization/evals/evals.json +27 -23
  25. package/pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md +107 -121
  26. package/pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md +145 -165
  27. package/pipeline/skills/shared/external/app-store-review/SKILL.md +306 -326
  28. package/pipeline/skills/shared/external/app-store-review/evals/evals.json +21 -21
  29. package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +105 -67
  30. package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +114 -101
  31. package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +335 -360
  32. package/pipeline/skills/shared/external/apple-on-device-ai/evals/evals.json +24 -27
  33. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +215 -322
  34. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +161 -256
  35. package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +277 -387
  36. package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +196 -210
  37. package/pipeline/skills/shared/external/authentication/SKILL.md +277 -381
  38. package/pipeline/skills/shared/external/authentication/evals/evals.json +25 -25
  39. package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +135 -178
  40. package/pipeline/skills/shared/external/authentication/references/passkeys.md +111 -147
  41. package/pipeline/skills/shared/external/avkit/SKILL.md +267 -364
  42. package/pipeline/skills/shared/external/avkit/evals/evals.json +26 -26
  43. package/pipeline/skills/shared/external/avkit/references/avkit-patterns.md +375 -493
  44. package/pipeline/skills/shared/external/background-processing/SKILL.md +274 -384
  45. package/pipeline/skills/shared/external/background-processing/evals/evals.json +22 -22
  46. package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +173 -321
  47. package/pipeline/skills/shared/external/callkit-voip/SKILL.md +290 -371
  48. package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +24 -24
  49. package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +175 -343
  50. package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +292 -381
  51. package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +33 -30
  52. package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +227 -355
  53. package/pipeline/skills/shared/external/contacts-framework/SKILL.md +197 -346
  54. package/pipeline/skills/shared/external/contacts-framework/evals/evals.json +19 -21
  55. package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +169 -308
  56. package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +228 -376
  57. package/pipeline/skills/shared/external/core-bluetooth/evals/evals.json +25 -22
  58. package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +257 -337
  59. package/pipeline/skills/shared/external/core-data/SKILL.md +302 -368
  60. package/pipeline/skills/shared/external/core-data/evals/evals.json +30 -27
  61. package/pipeline/skills/shared/external/core-motion/SKILL.md +235 -324
  62. package/pipeline/skills/shared/external/core-motion/evals/evals.json +31 -27
  63. package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +210 -310
  64. package/pipeline/skills/shared/external/core-nfc/SKILL.md +292 -366
  65. package/pipeline/skills/shared/external/core-nfc/evals/evals.json +22 -24
  66. package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +233 -329
  67. package/pipeline/skills/shared/external/coreml/SKILL.md +323 -367
  68. package/pipeline/skills/shared/external/coreml/evals/evals.json +24 -21
  69. package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +562 -565
  70. package/pipeline/skills/shared/external/cryptokit/SKILL.md +253 -394
  71. package/pipeline/skills/shared/external/cryptokit/evals/evals.json +20 -18
  72. package/pipeline/skills/shared/external/cryptokit/references/cryptokit-patterns.md +299 -488
  73. package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +270 -323
  74. package/pipeline/skills/shared/external/debugging-instruments/evals/evals.json +27 -30
  75. package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +167 -315
  76. package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +140 -193
  77. package/pipeline/skills/shared/external/device-integrity/SKILL.md +236 -353
  78. package/pipeline/skills/shared/external/device-integrity/evals/evals.json +25 -21
  79. package/pipeline/skills/shared/external/device-integrity/references/device-integrity-patterns.md +159 -197
  80. package/pipeline/skills/shared/external/energykit/SKILL.md +225 -392
  81. package/pipeline/skills/shared/external/energykit/evals/evals.json +29 -28
  82. package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +174 -470
  83. package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +261 -383
  84. package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +25 -22
  85. package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +165 -268
  86. package/pipeline/skills/shared/external/healthkit/SKILL.md +252 -303
  87. package/pipeline/skills/shared/external/healthkit/evals/evals.json +24 -23
  88. package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +369 -523
  89. package/pipeline/skills/shared/external/homekit-matter/SKILL.md +233 -348
  90. package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +27 -22
  91. package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +199 -305
  92. package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +368 -340
  93. package/pipeline/skills/shared/external/ios-accessibility/evals/evals.json +28 -27
  94. package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +314 -260
  95. package/pipeline/skills/shared/external/ios-accessibility/references/media-accessibility.md +97 -67
  96. package/pipeline/skills/shared/external/ios-accessibility/references/nutrition-labels.md +165 -101
  97. package/pipeline/skills/shared/external/ios-localization/SKILL.md +258 -371
  98. package/pipeline/skills/shared/external/ios-localization/evals/evals.json +23 -23
  99. package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +283 -491
  100. package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +313 -440
  101. package/pipeline/skills/shared/external/ios-networking/SKILL.md +265 -341
  102. package/pipeline/skills/shared/external/ios-networking/evals/evals.json +24 -24
  103. package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +425 -652
  104. package/pipeline/skills/shared/external/ios-networking/references/file-storage-patterns.md +143 -285
  105. package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +93 -53
  106. package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +231 -456
  107. package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +517 -784
  108. package/pipeline/skills/shared/external/ios-simulator/SKILL.md +265 -393
  109. package/pipeline/skills/shared/external/ios-simulator/evals/evals.json +21 -21
  110. package/pipeline/skills/shared/external/ios-simulator/references/simctl-commands.md +177 -270
  111. package/pipeline/skills/shared/external/live-activities/SKILL.md +318 -360
  112. package/pipeline/skills/shared/external/live-activities/evals/evals.json +21 -21
  113. package/pipeline/skills/shared/external/live-activities/references/activitykit-patterns.md +478 -710
  114. package/pipeline/skills/shared/external/localization-reuse-map/SKILL.md +3 -3
  115. package/pipeline/skills/shared/external/localization-reuse-map/example-mapping.json +1 -1
  116. package/pipeline/skills/shared/external/localization-reuse-map/reference/format-and-output.md +8 -7
  117. package/pipeline/skills/shared/external/localization-reuse-map/reference/publish-and-snapshot.md +2 -2
  118. package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +5 -2
  119. package/pipeline/skills/shared/external/localization-reuse-map/scripts/_shared.py +100 -0
  120. package/pipeline/skills/shared/external/localization-reuse-map/scripts/build-artifact.py +45 -26
  121. package/pipeline/skills/shared/external/localization-reuse-map/scripts/build-spreadsheet.py +14 -16
  122. package/pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-annotations.py +12 -5
  123. package/pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-legacy-labels.py +2 -1
  124. package/pipeline/skills/shared/external/localization-reuse-map/scripts/publish-confluence.py +6 -5
  125. package/pipeline/skills/shared/external/localization-reuse-map/scripts/render-overlay.py +44 -18
  126. package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-legacy-values.py +5 -2
  127. package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-new-values.py +10 -11
  128. package/pipeline/skills/shared/external/localization-reuse-map/scripts/scan-screen-keys.py +4 -33
  129. package/pipeline/skills/shared/external/localization-reuse-map/scripts/verify-map.py +12 -59
  130. package/pipeline/skills/shared/external/mapkit-location/SKILL.md +297 -267
  131. package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +28 -24
  132. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-corelocation-patterns.md +378 -532
  133. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +397 -499
  134. package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +165 -348
  135. package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +26 -23
  136. package/pipeline/skills/shared/external/metrickit-diagnostics/references/metrickit-patterns.md +123 -130
  137. package/pipeline/skills/shared/external/musickit-audio/SKILL.md +189 -315
  138. package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +22 -21
  139. package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +181 -270
  140. package/pipeline/skills/shared/external/natural-language/SKILL.md +188 -340
  141. package/pipeline/skills/shared/external/natural-language/evals/evals.json +21 -21
  142. package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +171 -225
  143. package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +258 -392
  144. package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +30 -29
  145. package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +164 -231
  146. package/pipeline/skills/shared/external/pdfkit/SKILL.md +312 -344
  147. package/pipeline/skills/shared/external/pdfkit/evals/evals.json +19 -19
  148. package/pipeline/skills/shared/external/pdfkit/references/pdfkit-patterns.md +413 -624
  149. package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +242 -358
  150. package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +25 -21
  151. package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +161 -226
  152. package/pipeline/skills/shared/external/permissionkit/SKILL.md +282 -400
  153. package/pipeline/skills/shared/external/permissionkit/evals/evals.json +27 -30
  154. package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +237 -350
  155. package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +276 -325
  156. package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +299 -545
  157. package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +344 -588
  158. package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +316 -660
  159. package/pipeline/skills/shared/external/photos-camera-media/references/photokit-patterns.md +270 -416
  160. package/pipeline/skills/shared/external/push-notifications/SKILL.md +312 -340
  161. package/pipeline/skills/shared/external/push-notifications/evals/evals.json +27 -26
  162. package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +328 -485
  163. package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +327 -560
  164. package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +218 -410
  165. package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +24 -27
  166. package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +221 -348
  167. package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +222 -393
  168. package/pipeline/skills/shared/external/shareplay-activities/evals/evals.json +23 -24
  169. package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +280 -420
  170. package/pipeline/skills/shared/external/skill-creator/template.md +7 -1
  171. package/pipeline/skills/shared/external/speech-recognition/SKILL.md +217 -421
  172. package/pipeline/skills/shared/external/speech-recognition/evals/evals.json +23 -26
  173. package/pipeline/skills/shared/external/speech-recognition/references/speechanalyzer-patterns.md +133 -125
  174. package/pipeline/skills/shared/external/storekit/SKILL.md +228 -204
  175. package/pipeline/skills/shared/external/storekit/evals/evals.json +27 -24
  176. package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +98 -109
  177. package/pipeline/skills/shared/external/storekit/references/core-patterns.md +302 -241
  178. package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +356 -649
  179. package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +274 -399
  180. package/pipeline/skills/shared/external/swift-api-design-guidelines/evals/evals.json +22 -24
  181. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/argument-labels-and-parameters.md +107 -108
  182. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/conventions-and-special-rules.md +93 -165
  183. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/naming-and-clarity.md +99 -137
  184. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/side-effects-and-mutating-pairs.md +77 -120
  185. package/pipeline/skills/shared/external/swift-architecture/SKILL.md +334 -350
  186. package/pipeline/skills/shared/external/swift-architecture/evals/evals.json +22 -22
  187. package/pipeline/skills/shared/external/swift-charts/SKILL.md +208 -394
  188. package/pipeline/skills/shared/external/swift-charts/evals/evals.json +27 -30
  189. package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +351 -762
  190. package/pipeline/skills/shared/external/swift-codable/SKILL.md +339 -343
  191. package/pipeline/skills/shared/external/swift-codable/evals/evals.json +20 -20
  192. package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +304 -351
  193. package/pipeline/skills/shared/external/swift-concurrency/evals/evals.json +27 -24
  194. package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +65 -80
  195. package/pipeline/skills/shared/external/swift-concurrency/references/async-algorithms.md +48 -84
  196. package/pipeline/skills/shared/external/swift-concurrency/references/bridging-interop.md +134 -79
  197. package/pipeline/skills/shared/external/swift-concurrency/references/concurrency-patterns.md +145 -167
  198. package/pipeline/skills/shared/external/swift-concurrency/references/diagnostics.md +62 -50
  199. package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +92 -121
  200. package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +177 -241
  201. package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +258 -234
  202. package/pipeline/skills/shared/external/swift-language/SKILL.md +342 -382
  203. package/pipeline/skills/shared/external/swift-language/evals/evals.json +24 -27
  204. package/pipeline/skills/shared/external/swift-language/references/swift-attributes-interop.md +79 -56
  205. package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +297 -340
  206. package/pipeline/skills/shared/external/swift-security/SKILL.md +183 -162
  207. package/pipeline/skills/shared/external/swift-security/evals/evals.json +25 -25
  208. package/pipeline/skills/shared/external/swift-security/references/biometric-authentication.md +314 -469
  209. package/pipeline/skills/shared/external/swift-security/references/certificate-trust.md +411 -476
  210. package/pipeline/skills/shared/external/swift-security/references/common-anti-patterns.md +260 -530
  211. package/pipeline/skills/shared/external/swift-security/references/compliance-owasp-mapping.md +270 -477
  212. package/pipeline/skills/shared/external/swift-security/references/credential-storage-patterns.md +573 -571
  213. package/pipeline/skills/shared/external/swift-security/references/cryptokit-public-key.md +370 -441
  214. package/pipeline/skills/shared/external/swift-security/references/cryptokit-symmetric.md +332 -433
  215. package/pipeline/skills/shared/external/swift-security/references/keychain-access-control.md +346 -468
  216. package/pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md +375 -491
  217. package/pipeline/skills/shared/external/swift-security/references/keychain-item-classes.md +431 -432
  218. package/pipeline/skills/shared/external/swift-security/references/keychain-sharing.md +328 -425
  219. package/pipeline/skills/shared/external/swift-security/references/migration-legacy-stores.md +341 -579
  220. package/pipeline/skills/shared/external/swift-security/references/secure-enclave.md +397 -457
  221. package/pipeline/skills/shared/external/swift-security/references/testing-security-code.md +354 -614
  222. package/pipeline/skills/shared/external/swift-testing/SKILL.md +191 -175
  223. package/pipeline/skills/shared/external/swift-testing/evals/evals.json +26 -24
  224. package/pipeline/skills/shared/external/swift-testing/references/testing-advanced.md +81 -84
  225. package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +317 -433
  226. package/pipeline/skills/shared/external/swiftdata/SKILL.md +394 -256
  227. package/pipeline/skills/shared/external/swiftdata/evals/evals.json +24 -24
  228. package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +206 -402
  229. package/pipeline/skills/shared/external/swiftdata/references/indexing.md +59 -52
  230. package/pipeline/skills/shared/external/swiftdata/references/predicate-pitfalls.md +57 -33
  231. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +354 -747
  232. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +300 -508
  233. package/pipeline/skills/shared/external/swiftlint/SKILL.md +175 -226
  234. package/pipeline/skills/shared/external/swiftlint/references/adoption-and-configuration.md +141 -208
  235. package/pipeline/skills/shared/external/swiftlint/references/custom-rules-and-analyze.md +100 -109
  236. package/pipeline/skills/shared/external/swiftlint/references/plugins-run-scripts-and-integrations.md +159 -179
  237. package/pipeline/skills/shared/external/swiftlint/references/rule-reference.md +383 -18
  238. package/pipeline/skills/shared/external/swiftlint/references/rules-suppressions-and-baselines.md +143 -229
  239. package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +283 -366
  240. package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +396 -608
  241. package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +336 -385
  242. package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +239 -349
  243. package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +228 -310
  244. package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +260 -249
  245. package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +92 -74
  246. package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +112 -177
  247. package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +61 -64
  248. package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +94 -134
  249. package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +193 -225
  250. package/pipeline/skills/shared/external/swiftui-liquid-glass/references/liquid-glass.md +173 -327
  251. package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +201 -168
  252. package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +127 -150
  253. package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +134 -133
  254. package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +152 -117
  255. package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +111 -138
  256. package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +316 -252
  257. package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +341 -332
  258. package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +547 -854
  259. package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +485 -537
  260. package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +417 -499
  261. package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +213 -376
  262. package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +86 -175
  263. package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +89 -195
  264. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +95 -182
  265. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +71 -149
  266. package/pipeline/skills/shared/external/swiftui-performance/references/wwdc-session-sources.md +21 -27
  267. package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +303 -295
  268. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +204 -387
  269. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +469 -683
  270. package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +140 -186
  271. package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +75 -86
  272. package/pipeline/skills/shared/external/swiftui-webkit/references/local-content-and-custom-schemes.md +63 -60
  273. package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +69 -137
  274. package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +95 -67
  275. package/pipeline/skills/shared/external/tipkit/SKILL.md +220 -335
  276. package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +356 -494
  277. package/pipeline/skills/shared/external/vision-framework/SKILL.md +260 -375
  278. package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +393 -515
  279. package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +363 -539
  280. package/pipeline/skills/shared/external/weatherkit/SKILL.md +160 -315
  281. package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +288 -407
  282. package/pipeline/skills/shared/external/widgetkit/SKILL.md +224 -288
  283. package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +416 -719
  284. package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +0 -39
@@ -4,45 +4,42 @@
4
4
  {
5
5
  "id": 0,
6
6
  "name": "speechanalyzer-live-transcription",
7
- "prompt": "I'm building an iOS 26 meeting recorder with live transcript text and word highlighting during playback. Sketch the SpeechAnalyzer implementation shape, including model setup, audio input, result handling, and cleanup.",
8
- "expected_output": "An iOS 26 SpeechAnalyzer plan that uses current SpeechTranscriber APIs, installs assets, converts live audio buffers, handles volatile/final results, and explicitly finishes the analyzer session.",
9
- "files": [],
7
+ "prompt": "Build live captions for an iOS 26 lecture-recording app with SpeechAnalyzer. Captions should appear while the lecturer speaks and later highlight words during playback. A draft we found uses SpeechTranscriber(locale:preset: .offlineTranscription) and simply finishes the input stream when recording stops. Correct it and outline the full flow.",
8
+ "expected_output": "Replaces the nonexistent .offlineTranscription with a documented preset such as .timeIndexedProgressiveTranscription, checks SpeechTranscriber.isAvailable and supportedLocale(equivalentTo:), installs assets through AssetInventory.assetInstallationRequest(supporting:), converts microphone buffers to SpeechAnalyzer.bestAvailableAudioFormat(compatibleWith:), keeps volatile and final text apart, and ends the session explicitly with a finalize or cancel call rather than relying on the input stream closing.",
10
9
  "assertions": [
11
- "Uses SpeechAnalyzer with SpeechTranscriber and a documented preset such as .timeIndexedProgressiveTranscription, not .offlineTranscription.",
12
- "Checks SpeechTranscriber.isAvailable and supportedLocale(equivalentTo:) before starting transcription.",
13
- "Installs or verifies model assets with AssetInventory.assetInstallationRequest(supporting:) before analysis.",
14
- "Converts AVAudioEngine microphone buffers to SpeechAnalyzer.bestAvailableAudioFormat(compatibleWith:) before yielding AnalyzerInput.",
15
- "Handles volatile results separately from finalized results so live text is replaced rather than duplicated.",
16
- "Explicitly finalizes or cancels the analyzer session after input ends."
10
+ "Uses a documented preset such as .timeIndexedProgressiveTranscription and rejects .offlineTranscription",
11
+ "Checks SpeechTranscriber.isAvailable and supportedLocale(equivalentTo:)",
12
+ "Installs assets with AssetInventory.assetInstallationRequest(supporting:)",
13
+ "Converts live buffers to bestAvailableAudioFormat(compatibleWith:)",
14
+ "Replaces volatile results with final ones instead of duplicating text",
15
+ "Ends the analyzer explicitly with finalizeAndFinish, finalizeAndFinishThroughEndOfInput or cancelAndFinishNow"
17
16
  ]
18
17
  },
19
18
  {
20
19
  "id": 1,
21
20
  "name": "sfspeechrecognizer-live-review",
22
- "prompt": "Review this iOS live dictation plan: request only NSSpeechRecognitionUsageDescription, start AVAudioEngine immediately, use SFSpeechRecognizer forever in one recognition task, force requiresOnDeviceRecognition for every locale, and ignore availability changes. Give corrected guidance and focused Swift snippets.",
23
- "expected_output": "A correction-focused SFSpeechRecognizer review that covers speech and microphone authorization, live audio setup, availability changes, on-device checks, task cleanup, and recognition duration limits.",
24
- "files": [],
21
+ "prompt": "Review our SFSpeechRecognizer voice-notes feature for an app that still supports iOS 16. We only add NSSpeechRecognitionUsageDescription, request speech permission after starting the audio engine, set requiresOnDeviceRecognition = true everywhere, and just call task.cancel() when the user taps Stop. Notes can run for several minutes.",
22
+ "expected_output": "Adds NSMicrophoneUsageDescription next to the speech key, requests both speech and microphone permission before activating the session and starting the engine, adopts SFSpeechRecognizerDelegate for availability changes, checks supportsOnDeviceRecognition before forcing on-device with a fallback or message, plans for the per-task duration limit by rolling over or chunking, and cleans up completely: stop the engine, remove the tap, call endAudio() and cancel the task.",
25
23
  "assertions": [
26
- "Requires both NSSpeechRecognitionUsageDescription and NSMicrophoneUsageDescription for live microphone transcription.",
27
- "Requests speech recognition authorization and microphone record permission before activating the audio session or starting AVAudioEngine.",
28
- "Uses SFSpeechRecognizerDelegate or availability handling for recognition service changes.",
29
- "Checks supportsOnDeviceRecognition before setting requiresOnDeviceRecognition and gives a fallback when unsupported.",
30
- "Accounts for SFSpeechRecognizer recognition duration/service limits instead of running one unbounded task.",
31
- "Stops AVAudioEngine, removes the input tap, ends audio, and cancels or clears the recognition task during cleanup."
24
+ "Requires both NSSpeechRecognitionUsageDescription and NSMicrophoneUsageDescription",
25
+ "Requests speech and microphone permission before the session and engine start",
26
+ "Handles availability changes through the recognizer delegate",
27
+ "Checks supportsOnDeviceRecognition before setting requiresOnDeviceRecognition, with a fallback",
28
+ "Accounts for the task duration limit on multi-minute notes",
29
+ "Stops the engine, removes the tap, calls endAudio() and cancels the task"
32
30
  ]
33
31
  },
34
32
  {
35
33
  "id": 2,
36
34
  "name": "speech-boundary-routing",
37
- "prompt": "A notes feature records a spoken note, transcribes it, detects the text language and sentiment, translates a summary to Spanish, plays back the recording with captions, and optionally uses Apple Intelligence to summarize it. Which parts belong in the speech-recognition skill and which should be handed to sibling skills?",
38
- "expected_output": "A boundary-aware routing answer that keeps speech-to-text and microphone capture in Speech, and routes text analysis, translation, playback UI, and generative summarization to the correct sibling skills.",
39
- "files": [],
35
+ "prompt": "Our meeting app records audio, shows a live transcript, detects which language each speaker used, rates the mood of the meeting, translates the transcript, plays recordings back with captions, and writes an AI summary. Which pieces does the speech skill own?",
36
+ "expected_output": "Keeps audio capture, speech and microphone permission, transcription and result handling in the speech skill. Sends language detection, mood or sentiment, embeddings and translation of the transcript to natural-language, playback with captions and AVPlayer to avkit, and Apple Intelligence or Foundation Models summaries to apple-on-device-ai. Does not blur NaturalLanguage and Speech together.",
40
37
  "assertions": [
41
- "Keeps microphone capture, speech authorization, SpeechAnalyzer or SFSpeechRecognizer transcription, and transcript result handling in the speech-recognition scope.",
42
- "Routes language detection, sentiment, text embeddings, and translation to the natural-language skill after transcription exists.",
43
- "Routes playback UI, captions during media playback, or AVPlayer/AVKit concerns to the avkit skill.",
44
- "Routes Apple Intelligence or Foundation Models summarization to the apple-on-device-ai skill.",
45
- "Does not present NaturalLanguage as a speech-to-text framework or Speech as a general text-analysis framework."
38
+ "Keeps capture, authorization, transcription and result handling in this skill",
39
+ "Sends language detection, sentiment, embeddings and translation to natural-language",
40
+ "Sends playback, captions and AVPlayer work to avkit",
41
+ "Sends generated summaries to apple-on-device-ai",
42
+ "Keeps the NaturalLanguage and Speech frameworks distinct"
46
43
  ]
47
44
  }
48
45
  ]
@@ -1,171 +1,179 @@
1
- # SpeechAnalyzer Patterns
1
+ # SpeechAnalyzer patterns (iOS 26+)
2
2
 
3
- Use this reference when implementing iOS 26+ speech-to-text with
4
- `SpeechAnalyzer`, `SpeechTranscriber`, `DictationTranscriber`, `SpeechDetector`,
5
- or `AssetInventory`.
3
+ Companion to the `speech-recognition` skill ([../SKILL.md](../SKILL.md)).
4
+ Every API here needs iOS 26 or later.
6
5
 
7
- ## Contents
8
-
9
- - [Choosing Modules](#choosing-modules)
10
- - [Preparing Assets](#preparing-assets)
11
- - [Transcribing Files](#transcribing-files)
12
- - [Live Audio](#live-audio)
13
- - [Handling Results](#handling-results)
14
- - [Finishing Sessions](#finishing-sessions)
15
- - [References](#references)
16
-
17
- ## Choosing Modules
18
-
19
- Prefer `SpeechTranscriber` for the newer general-purpose on-device model.
20
- Before building UI around it, check both device and locale support:
6
+ ## Picking modules
21
7
 
22
8
  ```swift
23
- guard SpeechTranscriber.isAvailable,
24
- let locale = SpeechTranscriber.supportedLocale(equivalentTo: Locale.current)
25
- else {
26
- // Disable the feature or try DictationTranscriber for compatible devices/locales.
27
- return
9
+ import Speech
10
+
11
+ func makeModule(for locale: Locale) async -> (any SpeechModule)? {
12
+ if SpeechTranscriber.isAvailable,
13
+ let matched = await SpeechTranscriber.supportedLocale(equivalentTo: locale) {
14
+ return SpeechTranscriber(locale: matched, preset: .progressiveTranscription)
15
+ }
16
+ if let matched = await DictationTranscriber.supportedLocale(equivalentTo: locale) {
17
+ return DictationTranscriber(locale: matched, preset: .progressiveLongDictation)
18
+ }
19
+ return nil // disable the feature for this device and locale
28
20
  }
29
21
  ```
30
22
 
31
- Use documented presets only:
23
+ ### SpeechTranscriber presets
32
24
 
33
- - `.transcription` for basic accurate transcription.
34
- - `.transcriptionWithAlternatives` for editing suggestions.
35
- - `.timeIndexedTranscriptionWithAlternatives` for audio-time metadata plus alternatives.
36
- - `.progressiveTranscription` for low-latency live UI updates.
37
- - `.timeIndexedProgressiveTranscription` for live UI updates with time ranges.
25
+ | Preset | Use it for |
26
+ |---|---|
27
+ | `.transcription` | Plain, accurate text |
28
+ | `.transcriptionWithAlternatives` | Editing UI that offers other candidate words |
29
+ | `.timeIndexedTranscriptionWithAlternatives` | Alternatives plus timing for each span |
30
+ | `.progressiveTranscription` | Low-latency live captions |
31
+ | `.timeIndexedProgressiveTranscription` | Live captions that also carry time ranges |
38
32
 
39
- Use `DictationTranscriber` when `SpeechTranscriber` is unavailable and the app
40
- can accept dictation-model behavior. Add `SpeechDetector` only with a
41
- transcriber module, and only when voice activity detection is worth the risk of
42
- dropping speech-like audio.
33
+ `SpeechDetector` never works alone; attach it next to a transcriber, and only
34
+ when skipping silence saves enough to justify occasionally dropping audio
35
+ that sounded like noise.
43
36
 
44
- ## Preparing Assets
37
+ ## Model assets
45
38
 
46
- `SpeechAnalyzer` modules require model assets. The system installs and shares
47
- them outside the app bundle, but the app must request installation for the
48
- module configuration it plans to use.
39
+ Speech models are not in your bundle. The system downloads and shares them
40
+ between apps, and your app asks for the ones its configuration needs:
49
41
 
50
42
  ```swift
51
- let transcriber = SpeechTranscriber(locale: locale, preset: .transcription)
52
-
53
- if let request = try await AssetInventory.assetInstallationRequest(
54
- supporting: [transcriber]
55
- ) {
56
- try await request.downloadAndInstall()
43
+ func ensureAssets(for transcriber: SpeechTranscriber) async throws {
44
+ if let install = try await AssetInventory.assetInstallationRequest(supporting: [transcriber]) {
45
+ try await install.downloadAndInstall()
46
+ }
57
47
  }
58
48
  ```
59
49
 
60
- For language pickers, use `installedLocales`, `supportedLocales`, and
61
- `AssetInventory.status(forModules:)` to distinguish installed, downloadable,
62
- and unsupported choices. The app has a limited number of locale reservations;
63
- release unused reservations with `AssetInventory.release(reservedLocale:)`.
50
+ For a language picker, combine `await SpeechTranscriber.installedLocales`,
51
+ `await SpeechTranscriber.supportedLocales` and
52
+ `AssetInventory.status(forModules:)`, which reports `.installed`,
53
+ `.downloading`, `.supported` (can be downloaded) or `.unsupported`.
64
54
 
65
- ## Transcribing Files
55
+ An app can reserve only a limited number of locales. Give one back with
56
+ `AssetInventory.release(reservedLocale:)` when the user drops a language.
66
57
 
67
- For files, let the analyzer convert the file to a compatible format and finish
68
- the session after the file is consumed.
58
+ ## Transcribing a file
69
59
 
70
- ```swift
71
- func transcribeFile(at url: URL, locale: Locale) async throws -> AttributedString {
72
- guard let supportedLocale = SpeechTranscriber.supportedLocale(equivalentTo: locale) else {
73
- throw SpeechError.unsupportedLocale
74
- }
60
+ The analyzer converts the file's audio format on its own.
75
61
 
76
- let transcriber = SpeechTranscriber(
77
- locale: supportedLocale,
78
- preset: .transcription
79
- )
62
+ ```swift
63
+ import AVFoundation
64
+ import Speech
80
65
 
81
- if let request = try await AssetInventory.assetInstallationRequest(
82
- supporting: [transcriber]
83
- ) {
84
- try await request.downloadAndInstall()
66
+ func transcript(of recording: URL, locale: Locale) async throws -> AttributedString {
67
+ guard let matched = await SpeechTranscriber.supportedLocale(equivalentTo: locale) else {
68
+ throw CocoaError(.featureUnsupported)
85
69
  }
70
+ let transcriber = SpeechTranscriber(locale: matched, preset: .transcription)
71
+ try await ensureAssets(for: transcriber)
86
72
 
87
73
  let analyzer = SpeechAnalyzer(modules: [transcriber])
88
- async let transcript = transcriber.results.reduce(into: AttributedString()) {
89
- text, result in
90
- text.append(result.text)
74
+ async let collected = transcriber.results.reduce(into: AttributedString()) { text, piece in
75
+ text.append(piece.text)
91
76
  }
92
77
 
93
- let file = try AVAudioFile(forReading: url)
94
- let lastSampleTime = try await analyzer.analyzeSequence(from: file)
95
- if let lastSampleTime {
96
- try await analyzer.finalizeAndFinish(through: lastSampleTime)
78
+ let audio = try AVAudioFile(forReading: recording)
79
+ if let lastSample = try await analyzer.analyzeSequence(from: audio) {
80
+ try await analyzer.finalizeAndFinish(through: lastSample)
97
81
  } else {
98
- try analyzer.cancelAndFinishNow()
82
+ await analyzer.cancelAndFinishNow()
99
83
  }
100
-
101
- return try await transcript
84
+ return try await collected
102
85
  }
103
86
  ```
104
87
 
105
- ## Live Audio
106
-
107
- For live audio, create an `AsyncStream<AnalyzerInput>`, convert microphone
108
- buffers to the analyzer-compatible format, yield them, and consume results in a
109
- separate task.
88
+ ## Live audio
110
89
 
111
90
  ```swift
112
- let transcriber = SpeechTranscriber(
113
- locale: locale,
114
- preset: .timeIndexedProgressiveTranscription
115
- )
116
- let analyzer = SpeechAnalyzer(modules: [transcriber])
117
- let audioFormat = await SpeechAnalyzer.bestAvailableAudioFormat(
118
- compatibleWith: [transcriber]
119
- )
120
- let (inputSequence, inputBuilder) = AsyncStream.makeStream(of: AnalyzerInput.self)
121
-
122
- // In the audio-engine tap, convert each AVAudioPCMBuffer to audioFormat first.
123
- inputBuilder.yield(AnalyzerInput(buffer: convertedBuffer))
124
- ```
125
-
126
- Use `AVAudioConverter` or an existing project audio pipeline for the conversion.
127
- Do not feed arbitrary input-node formats directly unless they already match a
128
- compatible analyzer format.
129
-
130
- ## Handling Results
91
+ import AVFoundation
92
+ import Speech
93
+
94
+ @MainActor
95
+ final class LiveTranscript {
96
+ private(set) var settled = AttributedString()
97
+ private(set) var pending = AttributedString()
98
+ private var analyzer: SpeechAnalyzer?
99
+ private var feed: AsyncStream<AnalyzerInput>.Continuation?
100
+ private var reader: Task<Void, Never>?
101
+
102
+ func start(locale: Locale) async throws -> AVAudioFormat? {
103
+ let transcriber = SpeechTranscriber(locale: locale, preset: .timeIndexedProgressiveTranscription)
104
+ try await ensureAssets(for: transcriber)
105
+ let analyzer = SpeechAnalyzer(modules: [transcriber])
106
+ let format = await SpeechAnalyzer.bestAvailableAudioFormat(compatibleWith: [transcriber])
107
+
108
+ let (inputs, feed) = AsyncStream.makeStream(of: AnalyzerInput.self)
109
+ self.feed = feed
110
+ self.analyzer = analyzer
111
+
112
+ reader = Task { [weak self] in
113
+ do {
114
+ for try await piece in transcriber.results {
115
+ self?.absorb(piece)
116
+ }
117
+ } catch {
118
+ // surface the error in the UI
119
+ }
120
+ }
121
+ try await analyzer.start(inputSequence: inputs)
122
+ return format // convert microphone buffers to this before yielding
123
+ }
131
124
 
132
- `SpeechTranscriber.Result.text` is an `AttributedString`. Time-indexed presets
133
- include audio time range attributes that can drive playback highlighting.
125
+ func push(_ converted: AVAudioPCMBuffer) {
126
+ feed?.yield(AnalyzerInput(buffer: converted))
127
+ }
134
128
 
135
- When using progressive presets, volatile results may be replaced by later final
136
- results. Keep volatile display state separate so the UI does not duplicate text.
129
+ func stop() async throws {
130
+ feed?.finish()
131
+ try await analyzer?.finalizeAndFinishThroughEndOfInput()
132
+ await reader?.value
133
+ }
137
134
 
138
- ```swift
139
- for try await result in transcriber.results {
140
- if result.isFinal {
141
- volatileTranscript = AttributedString()
142
- finalizedTranscript.append(result.text)
143
- } else {
144
- volatileTranscript = result.text
135
+ private func absorb(_ piece: SpeechTranscriber.Result) {
136
+ if piece.isFinal {
137
+ settled.append(piece.text)
138
+ pending = AttributedString()
139
+ } else {
140
+ pending = piece.text
141
+ }
145
142
  }
146
143
  }
147
144
  ```
148
145
 
149
- ## Finishing Sessions
146
+ Convert tap buffers with `AVAudioConverter` (or an audio pipeline you
147
+ already have) into the format returned by `bestAvailableAudioFormat`. Do not
148
+ feed raw input-node buffers unless their format already matches.
149
+
150
+ ## Reading results
150
151
 
151
- The analyzer can only analyze one input sequence at a time. Ending your stream
152
- does not finish the analyzer session; call a finish or cancel method.
152
+ `SpeechTranscriber.Result.text` is an `AttributedString`. With a
153
+ time-indexed preset its runs carry audio time-range attributes, which is how
154
+ playback can highlight the word being spoken. Progressive presets deliver
155
+ volatile results that a later final result replaces, so keep the volatile
156
+ text in its own state, as `pending` does above.
153
157
 
154
- Use:
158
+ ## Ending a session
155
159
 
156
- - `finalizeAndFinish(through:)` after `analyzeSequence(_:)` returns a final sample time.
157
- - `finalizeAndFinishThroughEndOfInput()` after autonomous `start(inputSequence:)`.
158
- - `cancelAndFinishNow()` for immediate cancellation.
160
+ - An analyzer processes one input sequence at a time, and finishing your
161
+ input stream does not end the session.
162
+ - After `analyzeSequence(_:)` returns the last sample time, call
163
+ `finalizeAndFinish(through:)`.
164
+ - After starting with `start(inputSequence:)`, call
165
+ `finalizeAndFinishThroughEndOfInput()` once input is complete.
166
+ - `cancelAndFinishNow()` stops immediately and discards pending work.
159
167
 
160
- After the session finishes, result streams terminate and most analyzer methods
161
- no longer accept new work. Create a new analyzer for a new finished session.
168
+ Once finished, the module result streams end and the analyzer refuses most
169
+ further calls. Create a new analyzer for the next session.
162
170
 
163
- ## References
171
+ ## Further reading
164
172
 
165
- - [SpeechAnalyzer](https://sosumi.ai/documentation/speech/speechanalyzer)
166
- - [SpeechTranscriber](https://sosumi.ai/documentation/speech/speechtranscriber)
167
- - [SpeechTranscriber.Preset](https://sosumi.ai/documentation/speech/speechtranscriber/preset)
168
- - [DictationTranscriber](https://sosumi.ai/documentation/speech/dictationtranscriber)
169
- - [SpeechDetector](https://sosumi.ai/documentation/speech/speechdetector)
170
- - [AssetInventory](https://sosumi.ai/documentation/speech/assetinventory)
171
- - [WWDC25: Bring advanced speech-to-text to your app with SpeechAnalyzer](https://sosumi.ai/videos/play/wwdc2025/277)
173
+ - https://developer.apple.com/documentation/speech/speechanalyzer
174
+ - https://developer.apple.com/documentation/speech/speechtranscriber
175
+ - https://developer.apple.com/documentation/speech/speechtranscriber/preset
176
+ - https://developer.apple.com/documentation/speech/dictationtranscriber
177
+ - https://developer.apple.com/documentation/speech/speechdetector
178
+ - https://developer.apple.com/documentation/speech/assetinventory
179
+ - WWDC25 session 277 on SpeechAnalyzer