@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
@@ -1,289 +1,275 @@
1
- # MLX Swift & llama.cpp Reference
2
-
3
- Complete reference for running open-source LLMs on Apple platforms using
4
- MLX Swift and llama.cpp.
1
+ # MLX Swift, llama.cpp and routing between backends
5
2
 
6
3
  ## Contents
7
4
 
8
- - [MLX Swift](#mlx-swift)
5
+ - [How MLX works](#how-mlx-works)
6
+ - [Loading and generating](#loading-and-generating)
7
+ - [Model sizes by device](#model-sizes-by-device)
8
+ - [Memory rules](#memory-rules)
9
+ - [Owning the model lifecycle](#owning-the-model-lifecycle)
10
+ - [Going to the background](#going-to-the-background)
9
11
  - [llama.cpp](#llamacpp)
10
- - [Multi-Backend Architecture](#multi-backend-architecture)
11
- - [Built-in Apple Frameworks](#built-in-apple-frameworks)
12
- - [Performance Best Practices](#performance-best-practices)
13
- - [Review Checklist](#review-checklist)
14
-
15
- ## MLX Swift
16
-
17
- Apple's ML framework for Swift. Highest sustained generation throughput on
18
- Apple Silicon via unified memory architecture.
12
+ - [GGUF quant types](#gguf-quant-types)
13
+ - [llama.cpp or MLX Swift](#llamacpp-or-mlx-swift)
14
+ - [Routing across backends](#routing-across-backends)
15
+ - [Built-in frameworks first](#built-in-frameworks-first)
16
+ - [Performance habits](#performance-habits)
17
+ - [Checklist](#checklist)
19
18
 
20
- ### Key Characteristics
19
+ ## How MLX works
21
20
 
22
- - Unified memory: operations run on CPU or GPU without data transfer
23
- - Lazy computation: operations computed only when needed
24
- - Automatic differentiation for training
25
- - Metal GPU acceleration
26
- - Research-oriented but increasingly used in production
21
+ - CPU and GPU share unified memory, so an array can move between them without
22
+ a copy.
23
+ - Evaluation is lazy; values are computed only when something needs them.
24
+ - It has automatic differentiation for training and runs on the GPU through
25
+ Metal.
26
+ - It started as a research tool and is used more and more in shipping apps.
27
27
 
28
- ### Loading and Running LLMs
28
+ ## Loading and generating
29
29
 
30
30
  ```swift
31
- import MLX
32
- import MLXLLM
33
- import MLXLMCommon
34
- import MLXLMHFAPI
35
31
  import MLXLMTokenizers
32
+ import MLXLMHFAPI
33
+ import MLXLMCommon
34
+ import MLXLLM
35
+ import MLX
36
36
 
37
+ let llama = ModelConfiguration(id: "mlx-community/Llama-3.2-3B-Instruct-4bit")
37
38
  let container = try await LLMModelFactory.shared.loadContainer(
38
39
  from: HubClient.default,
39
40
  using: TokenizersLoader(),
40
- configuration: .init(id: "mlx-community/Qwen3-4B-4bit")
41
+ configuration: llama
41
42
  )
43
+ ```
42
44
 
43
- let session = ChatSession(container)
44
- print(try await session.respond(to: "Hello"))
45
+ `ChatSession(container)` is the simple path. For control over streaming and
46
+ sampling, drive the container directly:
45
47
 
46
- // Use ModelContainer directly when you need streaming control.
47
- let input = try await container.prepare(input: UserInput(prompt: "Hello"))
48
- let stream = try await container.generate(
49
- input: input,
50
- parameters: GenerateParameters(temperature: 0.0)
51
- )
52
- for await event in stream {
53
- if case .chunk(let text) = event {
54
- print(text, terminator: "")
55
- }
48
+ ```swift
49
+ let question = UserInput(prompt: "Name three knots for climbing.")
50
+ let prepared = try await container.prepare(input: question)
51
+ let greedy = GenerateParameters(temperature: 0)
52
+ let events = try await container.generate(input: prepared, parameters: greedy)
53
+ for await item in events {
54
+ guard case .chunk(let piece) = item else { continue }
55
+ transcript += piece
56
56
  }
57
57
  ```
58
58
 
59
- ### Recommended Models by Device
59
+ ## Model sizes by device
60
+
61
+ | Device | Download size | Resident memory | Suggested model |
62
+ |---|---|---|---|
63
+ | iPhone 12 to 14 | about 278 MB | about 0.3 GB | SmolLM2-135M, or Qwen 2.5 at 0.5B |
64
+ | iPhone 15 Pro or newer | about 2.7 GB | about 3.5 GB | Gemma 3n E4B at 4 bits |
65
+ | Mac, 8 GB | about 1.8 GB | about 3 GB | Llama 3.2 3B at 4 bits |
66
+ | Mac, 16 GB or more | about 4 GB | about 6 GB | Mistral 7B at 4 bits |
60
67
 
61
- | Device | RAM | Recommended Model | Disk Size | RAM Usage |
62
- |---|---|---|---|---|
63
- | iPhone 12-14 | 4-6 GB | SmolLM2-135M or Qwen 2.5 0.5B | ~278 MB | ~0.3 GB |
64
- | iPhone 15 Pro+ | 8 GB | Gemma 3n E4B 4-bit | ~2.7 GB | ~3.5 GB |
65
- | Mac 8 GB | 8 GB | Llama 3.2 3B 4-bit | ~1.8 GB | ~3 GB |
66
- | Mac 16 GB+ | 16 GB+ | Mistral 7B 4-bit | ~4 GB | ~6 GB |
68
+ ## Memory rules
67
69
 
68
- ### Memory Management Rules
70
+ - On iOS keep total use under 60% of device RAM.
71
+ - Cap the buffer cache: `Memory.cacheLimit = 512 * 1024 * 1024`.
72
+ - Read `Memory.snapshot()` to watch usage, and lower the cache limit when the
73
+ system reports pressure.
74
+ - Before loading a model, check that the free memory can hold it.
75
+ - For larger models on iOS, add the Increased Memory Limit entitlement.
69
76
 
70
- 1. Never exceed 60% of total RAM on iOS
71
- 2. Set MLX cache limits:
72
- ```swift
73
- Memory.cacheLimit = 512 * 1024 * 1024 // 512 MB
74
- ```
75
- 3. Monitor memory pressure with `Memory.snapshot()` and reduce cache under pressure
76
- 4. Unload MLX and llama.cpp models on backgrounding or memory pressure; for MLX,
77
- also call `Memory.clearCache()` after generation-heavy phases
78
- 5. Use "Increased Memory Limit" entitlement for larger models on iOS
79
- 6. Pre-flight memory checks before loading models
80
- 7. Validate MLX Swift and llama.cpp on physical Apple Silicon; Simulator cannot
81
- exercise Metal-dependent inference, memory, or performance
77
+ ## Owning the model lifecycle
82
78
 
83
- ### Model Lifecycle Management
79
+ Keep the loaded model in one object that knows whether it is loaded, whether it
80
+ is generating, and how to let go of it.
84
81
 
85
82
  ```swift
83
+ import Observation
84
+
85
+ @MainActor
86
86
  @Observable
87
- class ModelManager {
88
- private var model: ModelContainer?
89
- private var generationCount = 0
90
-
91
- func loadModel() async throws {
92
- model = try await LLMModelFactory.shared.loadContainer(
93
- from: HubClient.default,
94
- using: TokenizersLoader(),
95
- configuration: .init(id: "mlx-community/Qwen3-4B-4bit")
96
- )
87
+ final class LocalModelHost {
88
+ private(set) var container: ModelContainer?
89
+ private(set) var runningGenerations = 0
90
+ private var generationTask: Task<Void, Never>?
91
+
92
+ var isBusy: Bool { runningGenerations > 0 }
93
+
94
+ func load(_ configuration: ModelConfiguration) async throws {
95
+ guard container == nil else { return }
96
+ let factory = LLMModelFactory.shared
97
+ container = try await factory.loadContainer(
98
+ from: HubClient.default, using: TokenizersLoader(), configuration: configuration)
97
99
  }
98
100
 
99
- func unloadModel() {
100
- model = nil
101
+ func cancelGeneration() { generationTask?.cancel() }
102
+
103
+ func unload() {
104
+ generationTask?.cancel()
105
+ container = nil
101
106
  Memory.clearCache()
102
107
  }
108
+
109
+ func track(_ task: Task<Void, Never>) {
110
+ generationTask = task
111
+ runningGenerations += 1
112
+ Task { await task.value; runningGenerations -= 1 }
113
+ }
103
114
  }
104
115
  ```
105
116
 
106
- Key lifecycle patterns:
107
- - Track active generation count to distinguish "loaded but idle" from
108
- "generating"
109
- - Unconditional cancellation on app backgrounding
110
- - 5-second delayed force-unload after backgrounding
111
- - Platform-specific memory monitoring (UIKit on iOS, DispatchSource on macOS)
117
+ - Count active generations so "loaded but idle" is distinguishable from
118
+ "working".
119
+ - When the app goes to the background, cancel generation every time, without
120
+ exceptions.
121
+ - After a short grace period in the background (five seconds works well),
122
+ unload the model.
123
+ - Memory warnings arrive differently per platform: through UIKit notifications
124
+ on iOS and through a `DispatchSource` memory-pressure source on macOS.
112
125
 
113
- ### Background Handling
126
+ ## Going to the background
114
127
 
115
128
  ```swift
116
- // iOS: Observe app lifecycle
117
- NotificationCenter.default.addObserver(
118
- forName: UIApplication.didEnterBackgroundNotification,
119
- object: nil, queue: .main
120
- ) { _ in
121
- modelManager.cancelGeneration()
122
- Task {
123
- try await Task.sleep(for: .seconds(5))
124
- modelManager.unloadModel()
129
+ import UIKit
130
+
131
+ @MainActor
132
+ func releaseModelWhenBackgrounded(_ host: LocalModelHost) async {
133
+ let grace = Duration.seconds(5)
134
+ let moves = NotificationCenter.default.notifications(
135
+ named: UIApplication.didEnterBackgroundNotification)
136
+ for await _ in moves {
137
+ host.cancelGeneration()
138
+ try? await Task.sleep(for: grace)
139
+ host.unload()
125
140
  }
126
141
  }
127
142
  ```
128
143
 
129
144
  ## llama.cpp
130
145
 
131
- C/C++ LLM inference engine. Best cross-platform support. Uses GGUF model format.
132
-
133
- ### Swift Integration (swift-llama-cpp)
146
+ llama.cpp is a C and C++ inference engine with the widest platform support. It
147
+ loads GGUF files. From Swift, the `swift-llama-cpp` package wraps it:
134
148
 
135
149
  ```swift
150
+ import Foundation
136
151
  import SwiftLlamaCpp
137
152
 
138
- let service = LlamaService(
139
- modelUrl: modelURL,
140
- config: .init(
141
- batchSize: 256,
142
- maxTokenCount: 4096,
143
- useGPU: true
144
- )
153
+ let engine = LlamaService(
154
+ modelUrl: ggufURL,
155
+ config: .init(batchSize: 512, maxTokenCount: 2048, useGPU: true)
145
156
  )
146
-
147
- let messages = [
148
- LlamaChatMessage(role: .system, content: "You are helpful."),
149
- LlamaChatMessage(role: .user, content: "Hello")
157
+ let conversation = [
158
+ LlamaChatMessage(role: .system, content: "Answer as a hiking guide."),
159
+ LlamaChatMessage(role: .user, content: "What should a day pack contain?")
150
160
  ]
151
-
152
- let stream = try await service.streamCompletion(
153
- of: messages,
161
+ for try await token in try await engine.streamCompletion(
162
+ of: conversation,
154
163
  samplingConfig: .init(temperature: 0.8)
155
- )
156
- for try await token in stream {
157
- print(token, terminator: "")
164
+ ) {
165
+ reply += token
158
166
  }
159
167
  ```
160
168
 
161
- ### GGUF Quantization Levels
169
+ ## GGUF quant types
162
170
 
163
- | Level | Quality | Size | Use Case |
171
+ | Type | Pick it when | Output quality | File size |
164
172
  |---|---|---|---|
165
- | Q2_K | Lowest | Smallest | Extreme memory constraints |
166
- | Q4_K_M | Good | Balanced | Mobile devices (recommended) |
167
- | Q5_K_M | Higher | Larger | When quality matters more |
168
- | Q8_0 | Near-original | Largest | Desktop with ample RAM |
173
+ | Q2_K | memory is extremely tight | lowest | smallest |
174
+ | Q4_K_M | shipping on phones; the usual default | good | balanced |
175
+ | Q5_K_M | a bit more quality is worth the space | higher | larger |
176
+ | Q8_0 | desktops with plenty of RAM | close to the original | largest |
169
177
 
170
- ### llama.cpp vs MLX Swift
178
+ ## llama.cpp or MLX Swift
171
179
 
172
- | Aspect | llama.cpp | MLX Swift |
180
+ | Question | MLX Swift | llama.cpp |
173
181
  |---|---|---|
174
- | Model format | GGUF | Hugging Face / MLX format |
175
- | Platform support | Cross-platform | Apple only |
176
- | Throughput (Apple Silicon) | Good | Best |
177
- | Model ecosystem | Broadest | mlx-community models |
178
- | Maturity | Very mature | Evolving |
179
- | Memory efficiency | Excellent | Good |
182
+ | Where does it run? | Apple platforms only | iOS, Android, desktop, servers |
183
+ | Weights it loads | MLX / Hugging Face format | GGUF files |
184
+ | Speed on Apple Silicon | the fastest | good |
185
+ | How efficient with memory? | good | excellent |
186
+ | How settled is it? | still changing quickly | long established |
187
+ | Where do models come from? | the `mlx-community` organisation | the widest range of sources |
180
188
 
181
- ## Multi-Backend Architecture
189
+ ## Routing across backends
182
190
 
183
- When an app needs multiple AI backends:
191
+ Order of preference:
184
192
 
185
- ### Fallback Chain Pattern
193
+ 1. Foundation Models, integrated with the system.
194
+ 2. MLX Swift, for throughput on Apple Silicon.
195
+ 3. llama.cpp, for compatibility.
196
+ 4. Nothing available: throw `AIError.noBackendAvailable`.
186
197
 
187
198
  ```swift
188
- func respond(to prompt: String) async throws -> String {
189
- // Try Foundation Models first when available (system-integrated backend)
190
- if SystemLanguageModel.default.isAvailable {
191
- return try await foundationModelsRespond(prompt)
199
+ enum AIError: Error { case noBackendAvailable }
200
+
201
+ actor ModelRouter {
202
+ enum Backend: Sendable { case foundationModels, mlx, llamaCpp }
203
+
204
+ private(set) var activeBackend: Backend?
205
+
206
+ func resolve() async throws -> Backend {
207
+ if let activeBackend { return activeBackend }
208
+ let choice: Backend
209
+ if SystemLanguageModel.default.isAvailable {
210
+ choice = .foundationModels
211
+ } else if await MLXSupport.canLoad(for: DeviceTier.current) {
212
+ choice = .mlx
213
+ } else if LlamaSupport.hasBundledModel {
214
+ choice = .llamaCpp
215
+ } else {
216
+ throw AIError.noBackendAvailable
217
+ }
218
+ activeBackend = choice
219
+ return choice
192
220
  }
193
-
194
- // Fall back to MLX Swift (best throughput)
195
- if canLoadMLXModel() {
196
- return try await mlxRespond(prompt)
197
- }
198
-
199
- // Fall back to llama.cpp (broadest compatibility)
200
- if llamaModelAvailable() {
201
- return try await llamaRespond(prompt)
202
- }
203
-
204
- throw AIError.noBackendAvailable
205
221
  }
206
222
  ```
207
223
 
208
- ### Architecture Guidelines
209
-
210
- 1. Create a router that checks Foundation Models availability first
211
- 2. Fall back to MLX or llama.cpp when Foundation Models is unavailable
212
- 3. Define model tiers based on device capabilities
213
- 4. Serialize all model access through a coordinator actor to prevent contention
214
- 5. Ensure tool systems work across backends (schema translation may be needed)
215
-
216
- ### Coordinator Actor
217
-
218
- ```swift
219
- actor ModelCoordinator {
220
- private var activeBackend: Backend?
221
-
222
- func withExclusiveAccess<T>(
223
- _ work: () async throws -> T
224
- ) async rethrows -> T {
225
- try await work()
226
- }
227
-
228
- enum Backend {
229
- case foundationModels
230
- case mlx
231
- case llamaCpp
232
- }
233
- }
234
- ```
235
-
236
- ## Built-in Apple Frameworks
237
-
238
- Before reaching for custom models, consider built-in frameworks:
239
-
240
- ### Natural Language Framework
224
+ Guidelines:
241
225
 
242
- No model downloads required:
226
+ - Ask the system model first; only when it is missing try MLX, then llama.cpp.
227
+ - Define model tiers per device class so each device gets a model it can hold.
228
+ - Serialise every model call through one coordinator actor (see SKILL.md for a
229
+ gate that actually queues requests).
230
+ - Tools may need translating: a Foundation Models `Tool` schema is not the
231
+ format an open model expects, so map tool definitions per backend.
243
232
 
244
- - `NLLanguageRecognizer` -- Language detection
245
- - `NLTokenizer` -- Word, sentence, paragraph tokenization
246
- - `NLTagger` -- Parts of speech, named entity recognition, sentiment
247
- - `NLEmbedding` -- Word and sentence vectors, similarity search
233
+ ## Built-in frameworks first
248
234
 
249
- ### Vision Framework
235
+ Before shipping a custom model, check whether the system already does the job.
250
236
 
251
- Built-in computer vision (legacy `VN*` API; for iOS 18+ prefer modern Swift equivalents like `RecognizeTextRequest`):
237
+ Natural Language, with nothing to download:
252
238
 
253
- - `VNRecognizeTextRequest` -- OCR
254
- - `VNClassifyImageRequest` -- Image classification
255
- - `VNDetectFaceRectanglesRequest` -- Face detection
256
- - `VNDetectHumanBodyPoseRequest` -- Body pose estimation
239
+ - Which language is this? `NLLanguageRecognizer`.
240
+ - Where are the word, sentence or paragraph boundaries? `NLTokenizer`.
241
+ - Tagging for sentiment, named entities or parts of speech: `NLTagger`.
242
+ - Vectors for words and sentences, and how close two are: `NLEmbedding`.
257
243
 
258
- ### Create ML
244
+ Vision (legacy `VN` names shown; from iOS 18 prefer the Swift request types
245
+ such as `RecognizeTextRequest`):
259
246
 
260
- Training custom classifiers directly on device or Mac:
247
+ - Reading text: `VNRecognizeTextRequest`.
248
+ - Labelling a whole image: `VNClassifyImageRequest`.
249
+ - Finding faces: `VNDetectFaceRectanglesRequest`.
250
+ - Human body pose: `VNDetectHumanBodyPoseRequest`.
261
251
 
262
- - Image classification
263
- - Text classification
264
- - Tabular data models
265
- - Sound classification
252
+ Create ML trains image, text, tabular and sound classifiers on a Mac or on
253
+ device.
266
254
 
267
- ## Performance Best Practices
255
+ ## Performance habits
268
256
 
269
- 1. Run outside debugger for accurate benchmarks (Xcode: Cmd-Opt-R, uncheck
270
- "Debug Executable")
271
- 2. Use `session.prewarm()` for Foundation Models before user interaction
272
- 3. Batch Vision framework requests in a single `perform()` call
273
- 4. Use `.fast` recognition level for real-time camera processing
274
- 5. Neural Engine (Core ML) is most energy-efficient for compatible operations
275
- 6. For MLX Swift, monitor token generation speed and adjust model size if
276
- below acceptable thresholds
257
+ - Send several Vision requests in one `perform()` call.
258
+ - Use the `.fast` recognition level for live camera text.
259
+ - Core ML on the Neural Engine is the most energy-efficient option for the ops
260
+ it supports.
261
+ - With MLX, track tokens per second; if it falls below what the feature needs,
262
+ move to a smaller model.
277
263
 
278
- ## Review Checklist
264
+ ## Checklist
279
265
 
280
- - [ ] Model size appropriate for target device RAM
281
- - [ ] Memory pressure monitoring implemented
282
- - [ ] Models unloaded on app backgrounding
283
- - [ ] MLX cache limits set appropriately
284
- - [ ] Pre-flight memory check before loading large models
285
- - [ ] Fallback strategy when model unavailable
286
- - [ ] All model access serialized through coordinator
287
- - [ ] Quantization level appropriate for quality/size tradeoff
288
- - [ ] Energy efficiency considered (Neural Engine vs GPU)
289
- - [ ] Physical device testing (not simulator) for Metal-dependent code
266
+ - [ ] The model fits the device's RAM.
267
+ - [ ] Memory pressure is monitored.
268
+ - [ ] Models unload when the app goes to the background.
269
+ - [ ] MLX cache limit is set.
270
+ - [ ] A memory check runs before loading a large model.
271
+ - [ ] There is a fallback when no model is available.
272
+ - [ ] All model access goes through one coordinator.
273
+ - [ ] The quantization level matches the quality and size trade-off.
274
+ - [ ] Energy use was considered (Neural Engine versus GPU).
275
+ - [ ] Metal inference was tested on physical devices.