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