@mmerterden/multi-agent-pipeline 20.7.0 → 20.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/LICENSE +0 -10
  3. package/docs/facts.json +1 -1
  4. package/manifest.json +266 -267
  5. package/package.json +2 -2
  6. package/pipeline/scripts/_notices.mjs +1 -1
  7. package/pipeline/skills/.skill-manifest.json +68 -68
  8. package/pipeline/skills/shared/README.md +70 -70
  9. package/pipeline/skills/shared/external/alarmkit/SKILL.md +373 -381
  10. package/pipeline/skills/shared/external/alarmkit/evals/evals.json +23 -18
  11. package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +328 -378
  12. package/pipeline/skills/shared/external/app-clips/SKILL.md +260 -160
  13. package/pipeline/skills/shared/external/app-clips/evals/evals.json +27 -27
  14. package/pipeline/skills/shared/external/app-clips/references/data-handoff-notifications-location.md +150 -83
  15. package/pipeline/skills/shared/external/app-clips/references/routing-and-experiences.md +135 -83
  16. package/pipeline/skills/shared/external/app-clips/references/size-capabilities-and-promotion.md +143 -85
  17. package/pipeline/skills/shared/external/app-intents/SKILL.md +302 -304
  18. package/pipeline/skills/shared/external/app-intents/evals/evals.json +21 -21
  19. package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +594 -894
  20. package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +339 -277
  21. package/pipeline/skills/shared/external/app-store-optimization/evals/evals.json +27 -23
  22. package/pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md +105 -122
  23. package/pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md +143 -166
  24. package/pipeline/skills/shared/external/app-store-review/SKILL.md +307 -326
  25. package/pipeline/skills/shared/external/app-store-review/evals/evals.json +21 -21
  26. package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +105 -67
  27. package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +114 -101
  28. package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +333 -360
  29. package/pipeline/skills/shared/external/apple-on-device-ai/evals/evals.json +24 -27
  30. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +215 -322
  31. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +161 -256
  32. package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +277 -387
  33. package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +196 -210
  34. package/pipeline/skills/shared/external/authentication/SKILL.md +265 -381
  35. package/pipeline/skills/shared/external/authentication/evals/evals.json +25 -25
  36. package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +133 -178
  37. package/pipeline/skills/shared/external/authentication/references/passkeys.md +111 -147
  38. package/pipeline/skills/shared/external/avkit/SKILL.md +267 -364
  39. package/pipeline/skills/shared/external/avkit/evals/evals.json +26 -26
  40. package/pipeline/skills/shared/external/avkit/references/avkit-patterns.md +375 -493
  41. package/pipeline/skills/shared/external/background-processing/SKILL.md +270 -382
  42. package/pipeline/skills/shared/external/background-processing/evals/evals.json +22 -22
  43. package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +169 -317
  44. package/pipeline/skills/shared/external/callkit-voip/SKILL.md +290 -371
  45. package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +24 -24
  46. package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +175 -343
  47. package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +292 -381
  48. package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +33 -30
  49. package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +227 -355
  50. package/pipeline/skills/shared/external/contacts-framework/SKILL.md +197 -346
  51. package/pipeline/skills/shared/external/contacts-framework/evals/evals.json +19 -21
  52. package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +169 -308
  53. package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +226 -376
  54. package/pipeline/skills/shared/external/core-bluetooth/evals/evals.json +25 -22
  55. package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +257 -337
  56. package/pipeline/skills/shared/external/core-data/SKILL.md +292 -368
  57. package/pipeline/skills/shared/external/core-data/evals/evals.json +30 -27
  58. package/pipeline/skills/shared/external/core-motion/SKILL.md +235 -324
  59. package/pipeline/skills/shared/external/core-motion/evals/evals.json +31 -27
  60. package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +210 -310
  61. package/pipeline/skills/shared/external/core-nfc/SKILL.md +292 -366
  62. package/pipeline/skills/shared/external/core-nfc/evals/evals.json +22 -24
  63. package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +233 -329
  64. package/pipeline/skills/shared/external/coreml/SKILL.md +323 -367
  65. package/pipeline/skills/shared/external/coreml/evals/evals.json +24 -21
  66. package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +562 -565
  67. package/pipeline/skills/shared/external/cryptokit/SKILL.md +253 -394
  68. package/pipeline/skills/shared/external/cryptokit/evals/evals.json +20 -18
  69. package/pipeline/skills/shared/external/cryptokit/references/cryptokit-patterns.md +299 -488
  70. package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +270 -323
  71. package/pipeline/skills/shared/external/debugging-instruments/evals/evals.json +27 -30
  72. package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +167 -315
  73. package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +140 -193
  74. package/pipeline/skills/shared/external/device-integrity/SKILL.md +230 -353
  75. package/pipeline/skills/shared/external/device-integrity/evals/evals.json +25 -21
  76. package/pipeline/skills/shared/external/device-integrity/references/device-integrity-patterns.md +159 -197
  77. package/pipeline/skills/shared/external/energykit/SKILL.md +225 -392
  78. package/pipeline/skills/shared/external/energykit/evals/evals.json +29 -28
  79. package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +174 -470
  80. package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +261 -383
  81. package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +25 -22
  82. package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +165 -268
  83. package/pipeline/skills/shared/external/healthkit/SKILL.md +252 -303
  84. package/pipeline/skills/shared/external/healthkit/evals/evals.json +24 -23
  85. package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +369 -523
  86. package/pipeline/skills/shared/external/homekit-matter/SKILL.md +233 -348
  87. package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +27 -22
  88. package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +199 -305
  89. package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +368 -340
  90. package/pipeline/skills/shared/external/ios-accessibility/evals/evals.json +28 -27
  91. package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +314 -260
  92. package/pipeline/skills/shared/external/ios-accessibility/references/media-accessibility.md +97 -67
  93. package/pipeline/skills/shared/external/ios-accessibility/references/nutrition-labels.md +165 -101
  94. package/pipeline/skills/shared/external/ios-localization/SKILL.md +258 -371
  95. package/pipeline/skills/shared/external/ios-localization/evals/evals.json +23 -23
  96. package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +283 -491
  97. package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +313 -440
  98. package/pipeline/skills/shared/external/ios-networking/SKILL.md +265 -341
  99. package/pipeline/skills/shared/external/ios-networking/evals/evals.json +24 -24
  100. package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +425 -652
  101. package/pipeline/skills/shared/external/ios-networking/references/file-storage-patterns.md +143 -285
  102. package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +93 -53
  103. package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +231 -456
  104. package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +517 -784
  105. package/pipeline/skills/shared/external/ios-simulator/SKILL.md +265 -393
  106. package/pipeline/skills/shared/external/ios-simulator/evals/evals.json +21 -21
  107. package/pipeline/skills/shared/external/ios-simulator/references/simctl-commands.md +177 -270
  108. package/pipeline/skills/shared/external/live-activities/SKILL.md +318 -360
  109. package/pipeline/skills/shared/external/live-activities/evals/evals.json +21 -21
  110. package/pipeline/skills/shared/external/live-activities/references/activitykit-patterns.md +478 -710
  111. package/pipeline/skills/shared/external/mapkit-location/SKILL.md +295 -267
  112. package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +28 -24
  113. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-corelocation-patterns.md +378 -532
  114. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +397 -499
  115. package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +165 -348
  116. package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +26 -23
  117. package/pipeline/skills/shared/external/metrickit-diagnostics/references/metrickit-patterns.md +123 -130
  118. package/pipeline/skills/shared/external/musickit-audio/SKILL.md +189 -315
  119. package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +22 -21
  120. package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +181 -270
  121. package/pipeline/skills/shared/external/natural-language/SKILL.md +188 -340
  122. package/pipeline/skills/shared/external/natural-language/evals/evals.json +21 -21
  123. package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +171 -225
  124. package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +258 -392
  125. package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +30 -29
  126. package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +164 -231
  127. package/pipeline/skills/shared/external/pdfkit/SKILL.md +312 -344
  128. package/pipeline/skills/shared/external/pdfkit/evals/evals.json +19 -19
  129. package/pipeline/skills/shared/external/pdfkit/references/pdfkit-patterns.md +413 -624
  130. package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +242 -358
  131. package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +25 -21
  132. package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +161 -226
  133. package/pipeline/skills/shared/external/permissionkit/SKILL.md +282 -400
  134. package/pipeline/skills/shared/external/permissionkit/evals/evals.json +27 -30
  135. package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +237 -350
  136. package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +276 -325
  137. package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +299 -545
  138. package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +344 -588
  139. package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +316 -660
  140. package/pipeline/skills/shared/external/photos-camera-media/references/photokit-patterns.md +270 -416
  141. package/pipeline/skills/shared/external/push-notifications/SKILL.md +312 -340
  142. package/pipeline/skills/shared/external/push-notifications/evals/evals.json +27 -26
  143. package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +328 -485
  144. package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +327 -560
  145. package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +218 -410
  146. package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +24 -27
  147. package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +221 -348
  148. package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +222 -393
  149. package/pipeline/skills/shared/external/shareplay-activities/evals/evals.json +23 -24
  150. package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +280 -420
  151. package/pipeline/skills/shared/external/speech-recognition/SKILL.md +217 -421
  152. package/pipeline/skills/shared/external/speech-recognition/evals/evals.json +23 -26
  153. package/pipeline/skills/shared/external/speech-recognition/references/speechanalyzer-patterns.md +133 -125
  154. package/pipeline/skills/shared/external/storekit/SKILL.md +228 -204
  155. package/pipeline/skills/shared/external/storekit/evals/evals.json +27 -24
  156. package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +98 -109
  157. package/pipeline/skills/shared/external/storekit/references/core-patterns.md +298 -242
  158. package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +356 -649
  159. package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +274 -399
  160. package/pipeline/skills/shared/external/swift-api-design-guidelines/evals/evals.json +22 -24
  161. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/argument-labels-and-parameters.md +107 -108
  162. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/conventions-and-special-rules.md +93 -165
  163. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/naming-and-clarity.md +99 -137
  164. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/side-effects-and-mutating-pairs.md +77 -120
  165. package/pipeline/skills/shared/external/swift-architecture/SKILL.md +334 -350
  166. package/pipeline/skills/shared/external/swift-architecture/evals/evals.json +22 -22
  167. package/pipeline/skills/shared/external/swift-charts/SKILL.md +208 -394
  168. package/pipeline/skills/shared/external/swift-charts/evals/evals.json +27 -30
  169. package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +351 -762
  170. package/pipeline/skills/shared/external/swift-codable/SKILL.md +339 -343
  171. package/pipeline/skills/shared/external/swift-codable/evals/evals.json +20 -20
  172. package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +303 -351
  173. package/pipeline/skills/shared/external/swift-concurrency/evals/evals.json +27 -24
  174. package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +65 -80
  175. package/pipeline/skills/shared/external/swift-concurrency/references/async-algorithms.md +48 -84
  176. package/pipeline/skills/shared/external/swift-concurrency/references/bridging-interop.md +134 -79
  177. package/pipeline/skills/shared/external/swift-concurrency/references/concurrency-patterns.md +145 -167
  178. package/pipeline/skills/shared/external/swift-concurrency/references/diagnostics.md +62 -50
  179. package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +92 -121
  180. package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +177 -241
  181. package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +258 -234
  182. package/pipeline/skills/shared/external/swift-language/SKILL.md +342 -382
  183. package/pipeline/skills/shared/external/swift-language/evals/evals.json +24 -27
  184. package/pipeline/skills/shared/external/swift-language/references/swift-attributes-interop.md +79 -56
  185. package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +297 -340
  186. package/pipeline/skills/shared/external/swift-security/SKILL.md +180 -161
  187. package/pipeline/skills/shared/external/swift-security/evals/evals.json +25 -25
  188. package/pipeline/skills/shared/external/swift-security/references/biometric-authentication.md +314 -469
  189. package/pipeline/skills/shared/external/swift-security/references/certificate-trust.md +408 -476
  190. package/pipeline/skills/shared/external/swift-security/references/common-anti-patterns.md +260 -530
  191. package/pipeline/skills/shared/external/swift-security/references/compliance-owasp-mapping.md +270 -477
  192. package/pipeline/skills/shared/external/swift-security/references/credential-storage-patterns.md +573 -571
  193. package/pipeline/skills/shared/external/swift-security/references/cryptokit-public-key.md +370 -441
  194. package/pipeline/skills/shared/external/swift-security/references/cryptokit-symmetric.md +332 -433
  195. package/pipeline/skills/shared/external/swift-security/references/keychain-access-control.md +346 -468
  196. package/pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md +352 -472
  197. package/pipeline/skills/shared/external/swift-security/references/keychain-item-classes.md +431 -432
  198. package/pipeline/skills/shared/external/swift-security/references/keychain-sharing.md +328 -425
  199. package/pipeline/skills/shared/external/swift-security/references/migration-legacy-stores.md +341 -579
  200. package/pipeline/skills/shared/external/swift-security/references/secure-enclave.md +396 -457
  201. package/pipeline/skills/shared/external/swift-security/references/testing-security-code.md +354 -614
  202. package/pipeline/skills/shared/external/swift-testing/SKILL.md +188 -175
  203. package/pipeline/skills/shared/external/swift-testing/evals/evals.json +26 -24
  204. package/pipeline/skills/shared/external/swift-testing/references/testing-advanced.md +80 -84
  205. package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +317 -433
  206. package/pipeline/skills/shared/external/swiftdata/SKILL.md +392 -256
  207. package/pipeline/skills/shared/external/swiftdata/evals/evals.json +24 -24
  208. package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +206 -402
  209. package/pipeline/skills/shared/external/swiftdata/references/indexing.md +59 -52
  210. package/pipeline/skills/shared/external/swiftdata/references/predicate-pitfalls.md +57 -33
  211. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +354 -747
  212. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +300 -508
  213. package/pipeline/skills/shared/external/swiftlint/SKILL.md +175 -226
  214. package/pipeline/skills/shared/external/swiftlint/references/adoption-and-configuration.md +141 -208
  215. package/pipeline/skills/shared/external/swiftlint/references/custom-rules-and-analyze.md +100 -109
  216. package/pipeline/skills/shared/external/swiftlint/references/plugins-run-scripts-and-integrations.md +159 -179
  217. package/pipeline/skills/shared/external/swiftlint/references/rule-reference.md +383 -18
  218. package/pipeline/skills/shared/external/swiftlint/references/rules-suppressions-and-baselines.md +143 -229
  219. package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +283 -366
  220. package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +396 -608
  221. package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +336 -385
  222. package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +239 -349
  223. package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +228 -310
  224. package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +260 -249
  225. package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +92 -74
  226. package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +112 -177
  227. package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +61 -64
  228. package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +94 -134
  229. package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +193 -225
  230. package/pipeline/skills/shared/external/swiftui-liquid-glass/references/liquid-glass.md +173 -327
  231. package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +193 -168
  232. package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +127 -150
  233. package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +132 -133
  234. package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +152 -117
  235. package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +106 -140
  236. package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +316 -252
  237. package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +341 -332
  238. package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +547 -854
  239. package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +485 -537
  240. package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +417 -499
  241. package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +213 -376
  242. package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +86 -175
  243. package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +89 -195
  244. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +95 -182
  245. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +71 -149
  246. package/pipeline/skills/shared/external/swiftui-performance/references/wwdc-session-sources.md +21 -27
  247. package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +303 -295
  248. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +204 -387
  249. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +469 -683
  250. package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +140 -186
  251. package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +75 -86
  252. package/pipeline/skills/shared/external/swiftui-webkit/references/local-content-and-custom-schemes.md +63 -60
  253. package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +69 -137
  254. package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +95 -67
  255. package/pipeline/skills/shared/external/tipkit/SKILL.md +220 -335
  256. package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +356 -494
  257. package/pipeline/skills/shared/external/vision-framework/SKILL.md +260 -375
  258. package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +393 -515
  259. package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +363 -539
  260. package/pipeline/skills/shared/external/weatherkit/SKILL.md +152 -310
  261. package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +288 -407
  262. package/pipeline/skills/shared/external/widgetkit/SKILL.md +216 -288
  263. package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +414 -719
  264. 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