@devo-bmad-custom/agent-orchestration 1.0.1 → 1.0.3
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.
- package/lib/installer.js +44 -11
- package/package.json +1 -1
- package/src/.agents/skills/audit-website/README.md +20 -20
- package/src/.agents/skills/audit-website/SKILL.md +470 -470
- package/src/.agents/skills/audit-website/agents/openai.yaml +6 -6
- package/src/.agents/skills/audit-website/assets/icon-small.svg +41 -41
- package/src/.agents/skills/audit-website/references/OUTPUT-FORMAT.md +250 -250
- package/src/.agents/skills/clean-code-standards/SKILL.md +104 -104
- package/src/.agents/skills/excalidraw-dark-standard/SKILL.md +281 -281
- package/src/.agents/skills/frontend-responsive-design-standards/SKILL.md +434 -434
- package/src/.agents/skills/java-fundamentals/SKILL.md +116 -116
- package/src/.agents/skills/java-performance/SKILL.md +119 -119
- package/src/.agents/skills/next-best-practices/SKILL.md +153 -153
- package/src/.agents/skills/next-best-practices/async-patterns.md +87 -87
- package/src/.agents/skills/next-best-practices/bundling.md +180 -180
- package/src/.agents/skills/next-best-practices/data-patterns.md +297 -297
- package/src/.agents/skills/next-best-practices/debug-tricks.md +105 -105
- package/src/.agents/skills/next-best-practices/directives.md +73 -73
- package/src/.agents/skills/next-best-practices/error-handling.md +227 -227
- package/src/.agents/skills/next-best-practices/file-conventions.md +140 -140
- package/src/.agents/skills/next-best-practices/font.md +245 -245
- package/src/.agents/skills/next-best-practices/functions.md +108 -108
- package/src/.agents/skills/next-best-practices/hydration-error.md +91 -91
- package/src/.agents/skills/next-best-practices/image.md +173 -173
- package/src/.agents/skills/next-best-practices/metadata.md +301 -301
- package/src/.agents/skills/next-best-practices/parallel-routes.md +287 -287
- package/src/.agents/skills/next-best-practices/route-handlers.md +146 -146
- package/src/.agents/skills/next-best-practices/rsc-boundaries.md +159 -159
- package/src/.agents/skills/next-best-practices/runtime-selection.md +39 -39
- package/src/.agents/skills/next-best-practices/scripts.md +141 -141
- package/src/.agents/skills/next-best-practices/self-hosting.md +371 -371
- package/src/.agents/skills/next-best-practices/suspense-boundaries.md +67 -67
- package/src/.agents/skills/nextjs-app-router-patterns/SKILL.md +537 -537
- package/src/.agents/skills/postgresql-optimization/SKILL.md +404 -404
- package/src/.agents/skills/python-backend/SKILL.md +153 -153
- package/src/.agents/skills/python-fundamentals/SKILL.md +234 -234
- package/src/.agents/skills/python-performance/SKILL.md +404 -404
- package/src/.agents/skills/react-expert/SKILL.md +335 -335
- package/src/.agents/skills/redis-best-practices/SKILL.md +438 -438
- package/src/.agents/skills/security-best-practices/SKILL.md +288 -288
- package/src/.agents/skills/security-review/LICENSE +22 -22
- package/src/.agents/skills/security-review/SKILL.md +312 -312
- package/src/.agents/skills/security-review/infrastructure/docker.md +432 -432
- package/src/.agents/skills/security-review/languages/javascript.md +388 -388
- package/src/.agents/skills/security-review/languages/python.md +363 -363
- package/src/.agents/skills/security-review/references/api-security.md +519 -519
- package/src/.agents/skills/security-review/references/authentication.md +353 -353
- package/src/.agents/skills/security-review/references/authorization.md +372 -372
- package/src/.agents/skills/security-review/references/business-logic.md +443 -443
- package/src/.agents/skills/security-review/references/cryptography.md +329 -329
- package/src/.agents/skills/security-review/references/csrf.md +398 -398
- package/src/.agents/skills/security-review/references/data-protection.md +378 -378
- package/src/.agents/skills/security-review/references/deserialization.md +410 -410
- package/src/.agents/skills/security-review/references/error-handling.md +436 -436
- package/src/.agents/skills/security-review/references/file-security.md +457 -457
- package/src/.agents/skills/security-review/references/injection.md +259 -259
- package/src/.agents/skills/security-review/references/logging.md +433 -433
- package/src/.agents/skills/security-review/references/misconfiguration.md +435 -435
- package/src/.agents/skills/security-review/references/modern-threats.md +475 -475
- package/src/.agents/skills/security-review/references/ssrf.md +415 -415
- package/src/.agents/skills/security-review/references/supply-chain.md +405 -405
- package/src/.agents/skills/security-review/references/xss.md +336 -336
- package/src/.agents/skills/subagent-driven-development/SKILL.md +275 -275
- package/src/.agents/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -26
- package/src/.agents/skills/subagent-driven-development/implementer-prompt.md +113 -113
- package/src/.agents/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -61
- package/src/.agents/skills/systematic-debugging/CREATION-LOG.md +119 -119
- package/src/.agents/skills/systematic-debugging/SKILL.md +296 -296
- package/src/.agents/skills/systematic-debugging/condition-based-waiting-example.ts +158 -158
- package/src/.agents/skills/systematic-debugging/condition-based-waiting.md +115 -115
- package/src/.agents/skills/systematic-debugging/defense-in-depth.md +122 -122
- package/src/.agents/skills/systematic-debugging/root-cause-tracing.md +169 -169
- package/src/.agents/skills/systematic-debugging/test-academic.md +14 -14
- package/src/.agents/skills/systematic-debugging/test-pressure-1.md +58 -58
- package/src/.agents/skills/systematic-debugging/test-pressure-2.md +68 -68
- package/src/.agents/skills/systematic-debugging/test-pressure-3.md +69 -69
- package/src/.agents/skills/typescript-best-practices/SKILL.md +373 -373
- package/src/.agents/skills/ui-ux-pro-custom/SKILL.md +348 -348
- package/src/.agents/skills/ui-ux-pro-custom/data/charts.csv +26 -26
- package/src/.agents/skills/ui-ux-pro-custom/data/colors.csv +97 -97
- package/src/.agents/skills/ui-ux-pro-custom/data/icons.csv +101 -101
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/SKILL.md +106 -106
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/accessibility.md +475 -475
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/animation.md +466 -466
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/composition-locals.md +231 -231
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/deprecated-patterns.md +323 -323
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/lists-scrolling.md +400 -400
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/modifiers.md +331 -331
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/navigation.md +416 -416
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/performance.md +446 -446
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/side-effects.md +516 -516
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/source-code/foundation-source.md +13327 -13327
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/source-code/material3-source.md +19097 -19097
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/source-code/navigation-source.md +2947 -2947
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/source-code/runtime-source.md +11316 -11316
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/source-code/ui-source.md +7896 -7896
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/state-management.md +377 -377
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/styles-experimental.md +470 -470
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/theming-material3.md +349 -349
- package/src/.agents/skills/ui-ux-pro-custom/data/jetpack-compose-expert-skill/references/view-composition.md +595 -595
- package/src/.agents/skills/ui-ux-pro-custom/data/landing.csv +31 -31
- package/src/.agents/skills/ui-ux-pro-custom/data/mobile-ui-layout.md +654 -654
- package/src/.agents/skills/ui-ux-pro-custom/data/products.csv +96 -96
- package/src/.agents/skills/ui-ux-pro-custom/data/react-performance.csv +45 -45
- package/src/.agents/skills/ui-ux-pro-custom/data/stacks/astro.csv +54 -54
- package/src/.agents/skills/ui-ux-pro-custom/data/stacks/flutter.csv +53 -53
- package/src/.agents/skills/ui-ux-pro-custom/data/stacks/html-tailwind.csv +56 -56
- package/src/.agents/skills/ui-ux-pro-custom/data/stacks/jetpack-compose.csv +53 -53
- package/src/.agents/skills/ui-ux-pro-custom/data/stacks/nextjs.csv +53 -53
- package/src/.agents/skills/ui-ux-pro-custom/data/stacks/nuxt-ui.csv +51 -51
- package/src/.agents/skills/ui-ux-pro-custom/data/stacks/nuxtjs.csv +59 -59
- package/src/.agents/skills/ui-ux-pro-custom/data/stacks/react-native.csv +56 -56
- package/src/.agents/skills/ui-ux-pro-custom/data/stacks/react.csv +54 -54
- package/src/.agents/skills/ui-ux-pro-custom/data/stacks/shadcn.csv +61 -61
- package/src/.agents/skills/ui-ux-pro-custom/data/stacks/svelte.csv +54 -54
- package/src/.agents/skills/ui-ux-pro-custom/data/stacks/swiftui.csv +51 -51
- package/src/.agents/skills/ui-ux-pro-custom/data/stacks/vue.csv +50 -50
- package/src/.agents/skills/ui-ux-pro-custom/data/styles.csv +68 -68
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/alarmkit/SKILL.md +438 -438
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/alarmkit/references/alarmkit-patterns.md +584 -584
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/app-clips/SKILL.md +436 -436
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/app-intents/SKILL.md +489 -489
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/app-intents/references/appintents-advanced.md +1076 -1076
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/app-store-review/SKILL.md +340 -340
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/app-store-review/references/privacy-manifest.md +90 -90
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/app-store-review/references/review-checklists.md +106 -106
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/apple-on-device-ai/SKILL.md +500 -500
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/apple-on-device-ai/references/coreml-conversion.md +425 -425
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/apple-on-device-ai/references/coreml-optimization.md +344 -344
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/apple-on-device-ai/references/foundation-models.md +508 -508
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/apple-on-device-ai/references/mlx-swift.md +285 -285
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/authentication/SKILL.md +496 -496
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/authentication/references/keychain-biometric.md +211 -211
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/background-processing/SKILL.md +499 -499
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/background-processing/references/background-task-patterns.md +390 -390
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/callkit-voip/SKILL.md +461 -461
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/callkit-voip/references/callkit-patterns.md +425 -425
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/cloudkit-sync/SKILL.md +492 -492
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/cloudkit-sync/references/cloudkit-patterns.md +461 -461
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/codable-patterns/SKILL.md +467 -467
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/contacts-framework/SKILL.md +425 -425
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/contacts-framework/references/contacts-patterns.md +409 -409
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/core-bluetooth/SKILL.md +491 -491
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/core-bluetooth/references/ble-patterns.md +435 -435
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/core-motion/SKILL.md +388 -388
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/core-motion/references/motion-patterns.md +405 -405
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/core-nfc/SKILL.md +495 -495
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/core-nfc/references/nfc-patterns.md +420 -420
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/coreml/SKILL.md +459 -459
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/coreml/references/coreml-swift-integration.md +765 -765
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/debugging-instruments/SKILL.md +422 -422
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/debugging-instruments/references/instruments-guide.md +387 -387
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/debugging-instruments/references/lldb-patterns.md +298 -298
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/device-integrity/SKILL.md +477 -477
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/energykit/SKILL.md +460 -460
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/energykit/references/energykit-patterns.md +541 -541
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/eventkit-calendar/SKILL.md +483 -483
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/eventkit-calendar/references/eventkit-patterns.md +326 -326
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/healthkit/SKILL.md +498 -498
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/healthkit/references/healthkit-patterns.md +602 -602
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/homekit-matter/SKILL.md +496 -496
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/homekit-matter/references/matter-commissioning.md +455 -455
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-accessibility/SKILL.md +301 -301
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-accessibility/references/a11y-patterns.md +140 -140
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-localization/SKILL.md +418 -418
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-localization/references/formatstyle-locale.md +627 -627
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-localization/references/string-catalogs.md +462 -462
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-networking/SKILL.md +441 -441
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-networking/references/background-websocket.md +862 -862
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-networking/references/lightweight-clients.md +93 -93
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-networking/references/network-framework.md +563 -563
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-networking/references/urlsession-patterns.md +1116 -1116
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-security/SKILL.md +496 -496
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-security/references/app-review-guidelines.md +174 -174
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-security/references/cryptokit-advanced.md +296 -296
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-security/references/file-storage-patterns.md +354 -354
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/ios-security/references/privacy-manifest.md +117 -117
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/live-activities/SKILL.md +500 -500
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/live-activities/references/live-activity-patterns.md +868 -868
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/mapkit-location/SKILL.md +485 -485
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/mapkit-location/references/corelocation-patterns.md +730 -730
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/mapkit-location/references/mapkit-patterns.md +748 -748
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/metrickit-diagnostics/SKILL.md +479 -479
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/musickit-audio/SKILL.md +395 -395
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/musickit-audio/references/musickit-patterns.md +363 -363
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/natural-language/SKILL.md +412 -412
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/natural-language/references/translation-patterns.md +311 -311
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/passkit-wallet/SKILL.md +398 -398
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/passkit-wallet/references/wallet-passes.md +254 -254
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/pencilkit-drawing/SKILL.md +387 -387
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/pencilkit-drawing/references/paperkit-integration.md +376 -376
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/pencilkit-drawing/references/pencilkit-patterns.md +302 -302
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/permissionkit/SKILL.md +446 -446
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/permissionkit/references/permissionkit-patterns.md +435 -435
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/photos-camera-media/SKILL.md +500 -500
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/photos-camera-media/references/av-playback.md +701 -701
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/photos-camera-media/references/camera-capture.md +774 -774
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/photos-camera-media/references/image-loading-caching.md +869 -869
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/photos-camera-media/references/photospicker-patterns.md +597 -597
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/push-notifications/SKILL.md +500 -500
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/push-notifications/references/notification-patterns.md +677 -677
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/push-notifications/references/rich-notifications.md +745 -745
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/realitykit-ar/SKILL.md +479 -479
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/realitykit-ar/references/realitykit-patterns.md +480 -480
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/shareplay-activities/SKILL.md +483 -483
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/shareplay-activities/references/shareplay-patterns.md +544 -544
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/speech-recognition/SKILL.md +485 -485
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/storekit/SKILL.md +478 -478
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/storekit/references/app-review-guidelines.md +58 -58
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/storekit/references/storekit-advanced.md +755 -755
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-charts/SKILL.md +487 -487
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-charts/references/charts-patterns.md +895 -895
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-concurrency/SKILL.md +408 -408
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-concurrency/references/approachable-concurrency.md +80 -80
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-concurrency/references/swift-6-2-concurrency.md +233 -233
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-concurrency/references/swiftui-concurrency.md +187 -187
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-concurrency/references/synchronization-primitives.md +341 -341
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-language/SKILL.md +498 -498
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-language/references/swift-patterns-extended.md +505 -505
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-testing/SKILL.md +467 -467
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swift-testing/references/testing-patterns.md +504 -504
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftdata/SKILL.md +334 -334
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftdata/references/core-data-coexistence.md +504 -504
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftdata/references/swiftdata-advanced.md +975 -975
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftdata/references/swiftdata-queries.md +675 -675
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-animation/SKILL.md +481 -481
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-animation/references/animation-advanced.md +804 -804
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-animation/references/core-animation-bridge.md +553 -553
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-gestures/SKILL.md +450 -450
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-gestures/references/gesture-patterns.md +425 -425
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-layout-components/SKILL.md +336 -336
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-layout-components/references/form.md +97 -97
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-layout-components/references/grids.md +69 -69
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-layout-components/references/list.md +99 -99
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-layout-components/references/scrollview.md +147 -147
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-liquid-glass/SKILL.md +325 -325
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-liquid-glass/references/liquid-glass.md +387 -387
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-navigation/SKILL.md +262 -262
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-navigation/references/deeplinks.md +207 -207
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-navigation/references/navigationstack.md +177 -177
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-navigation/references/sheets.md +169 -169
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-navigation/references/tabview.md +178 -178
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-patterns/SKILL.md +381 -381
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-patterns/references/architecture-patterns.md +486 -486
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-patterns/references/deprecated-migration.md +1097 -1097
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-patterns/references/design-polish.md +780 -780
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-patterns/references/platform-and-sharing.md +696 -696
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-performance/SKILL.md +491 -491
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +46 -46
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +29 -29
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-performance/references/understanding-hangs-in-your-app.md +33 -33
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-performance/references/understanding-improving-swiftui-performance.md +52 -52
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-uikit-interop/SKILL.md +428 -428
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-uikit-interop/references/hosting-migration.md +534 -534
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/swiftui-uikit-interop/references/representable-recipes.md +1133 -1133
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/tipkit/SKILL.md +494 -494
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/tipkit/references/tipkit-patterns.md +782 -782
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/vision-framework/SKILL.md +475 -475
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/vision-framework/references/vision-requests.md +736 -736
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/vision-framework/references/visionkit-scanner.md +738 -738
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/weatherkit/SKILL.md +410 -410
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/weatherkit/references/weatherkit-patterns.md +567 -567
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/widgetkit/SKILL.md +497 -497
- package/src/.agents/skills/ui-ux-pro-custom/data/swift-ios-skills/widgetkit/references/widgetkit-advanced.md +871 -871
- package/src/.agents/skills/ui-ux-pro-custom/data/typography.csv +57 -57
- package/src/.agents/skills/ui-ux-pro-custom/data/ui-reasoning.csv +101 -101
- package/src/.agents/skills/ui-ux-pro-custom/data/ux-guidelines.csv +99 -99
- package/src/.agents/skills/ui-ux-pro-custom/data/web-interface.csv +31 -31
- package/src/.agents/skills/ui-ux-pro-custom/scripts/core.py +253 -253
- package/src/.agents/skills/ui-ux-pro-custom/scripts/design_system.py +1067 -1067
- package/src/.agents/skills/ui-ux-pro-custom/scripts/search.py +114 -114
- package/src/.agents/skills/ux-audit/SKILL.md +150 -150
- package/src/.agents/skills/websocket-engineer/SKILL.md +168 -168
- package/src/.agents/skills/websocket-engineer/references/alternatives.md +391 -391
- package/src/.agents/skills/websocket-engineer/references/patterns.md +400 -400
- package/src/.agents/skills/websocket-engineer/references/protocol.md +195 -195
- package/src/.agents/skills/websocket-engineer/references/scaling.md +333 -333
- package/src/.agents/skills/websocket-engineer/references/security.md +474 -474
- package/src/.agents/skills/writing-skills/SKILL.md +655 -655
- package/src/.agents/skills/writing-skills/anthropic-best-practices.md +1150 -1150
- package/src/.agents/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -189
- package/src/.agents/skills/writing-skills/graphviz-conventions.dot +171 -171
- package/src/.agents/skills/writing-skills/persuasion-principles.md +187 -187
- package/src/.agents/skills/writing-skills/render-graphs.js +168 -168
- package/src/.agents/skills/writing-skills/testing-skills-with-subagents.md +384 -384
- package/src/.claude/commands/bmad-track-compact.md +1 -1
- package/src/.claude/commands/bmad-track-extended.md +1 -1
- package/src/.claude/commands/bmad-track-large.md +1 -1
- package/src/.claude/commands/bmad-track-medium.md +1 -1
- package/src/.claude/commands/bmad-track-nano.md +1 -1
- package/src/.claude/commands/bmad-track-rv.md +1 -1
- package/src/.claude/commands/bmad-track-small.md +1 -1
- package/src/.claude/commands/master-orchestrator.md +15 -0
- package/src/_memory/config.yaml +11 -11
- package/src/_memory/master-orchestrator-sidecar/instructions.md +85 -32
- package/src/_memory/skills/nimbalyst-tracking/SKILL.md +103 -103
- package/src/_memory/skills/writing-skills/SKILL.md +655 -655
- package/src/bmb/agents/agent-builder.md +59 -59
- package/src/bmb/agents/module-builder.md +60 -60
- package/src/bmb/agents/workflow-builder.md +61 -61
- package/src/bmb/config.yaml +12 -12
- package/src/bmb/module-help.csv +13 -13
- package/src/bmb/workflows/agent/data/agent-architecture.md +258 -258
- package/src/bmb/workflows/agent/data/agent-compilation.md +185 -185
- package/src/bmb/workflows/agent/data/agent-menu-patterns.md +189 -189
- package/src/bmb/workflows/agent/data/agent-metadata.md +133 -133
- package/src/bmb/workflows/agent/data/agent-validation.md +111 -111
- package/src/bmb/workflows/agent/data/brainstorm-context.md +96 -96
- package/src/bmb/workflows/agent/data/communication-presets.csv +61 -61
- package/src/bmb/workflows/agent/data/critical-actions.md +75 -75
- package/src/bmb/workflows/agent/data/persona-properties.md +252 -252
- package/src/bmb/workflows/agent/data/principles-crafting.md +142 -142
- package/src/bmb/workflows/agent/data/reference/module-examples/architect.md +68 -68
- package/src/bmb/workflows/agent/data/reference/with-sidecar/journal-keeper/journal-keeper-sidecar/entries/yy-mm-dd-entry-template.md +16 -16
- package/src/bmb/workflows/agent/data/understanding-agent-types.md +126 -126
- package/src/bmb/workflows/agent/steps-c/step-01-brainstorm.md +129 -129
- package/src/bmb/workflows/agent/steps-c/step-02-discovery.md +170 -170
- package/src/bmb/workflows/agent/steps-c/step-03-sidecar-metadata.md +309 -309
- package/src/bmb/workflows/agent/steps-c/step-04-persona.md +213 -213
- package/src/bmb/workflows/agent/steps-c/step-05-commands-menu.md +179 -179
- package/src/bmb/workflows/agent/steps-c/step-06-activation.md +278 -278
- package/src/bmb/workflows/agent/steps-c/step-07-build-agent.md +316 -316
- package/src/bmb/workflows/agent/steps-c/step-08-celebrate.md +247 -247
- package/src/bmb/workflows/agent/steps-e/e-01-load-existing.md +221 -221
- package/src/bmb/workflows/agent/steps-e/e-02-discover-edits.md +195 -195
- package/src/bmb/workflows/agent/steps-e/e-04-sidecar-metadata.md +126 -126
- package/src/bmb/workflows/agent/steps-e/e-05-persona.md +135 -135
- package/src/bmb/workflows/agent/steps-e/e-06-commands-menu.md +123 -123
- package/src/bmb/workflows/agent/steps-e/e-07-activation.md +124 -124
- package/src/bmb/workflows/agent/steps-e/e-08-edit-agent.md +197 -197
- package/src/bmb/workflows/agent/steps-e/e-09-celebrate.md +155 -155
- package/src/bmb/workflows/agent/steps-v/v-01-load-review.md +137 -137
- package/src/bmb/workflows/agent/steps-v/v-02a-validate-metadata.md +116 -116
- package/src/bmb/workflows/agent/steps-v/v-02b-validate-persona.md +124 -124
- package/src/bmb/workflows/agent/steps-v/v-02c-validate-menu.md +127 -127
- package/src/bmb/workflows/agent/steps-v/v-02d-validate-structure.md +134 -134
- package/src/bmb/workflows/agent/steps-v/v-02e-validate-sidecar.md +134 -134
- package/src/bmb/workflows/agent/steps-v/v-03-summary.md +104 -104
- package/src/bmb/workflows/agent/templates/agent-plan.template.md +5 -5
- package/src/bmb/workflows/agent/templates/agent-template.md +89 -89
- package/src/bmb/workflows/agent/workflow-create-agent.md +72 -72
- package/src/bmb/workflows/agent/workflow-edit-agent.md +75 -75
- package/src/bmb/workflows/agent/workflow-validate-agent.md +73 -73
- package/src/bmb/workflows/module/data/agent-architecture.md +179 -179
- package/src/bmb/workflows/module/data/agent-spec-template.md +79 -79
- package/src/bmb/workflows/module/data/module-standards.md +263 -263
- package/src/bmb/workflows/module/data/module-yaml-conventions.md +392 -392
- package/src/bmb/workflows/module/module-help-generate.md +254 -254
- package/src/bmb/workflows/module/steps-b/step-01-welcome.md +148 -148
- package/src/bmb/workflows/module/steps-b/step-02-spark.md +141 -141
- package/src/bmb/workflows/module/steps-b/step-03-module-type.md +149 -149
- package/src/bmb/workflows/module/steps-b/step-04-vision.md +83 -83
- package/src/bmb/workflows/module/steps-b/step-05-identity.md +97 -97
- package/src/bmb/workflows/module/steps-b/step-06-users.md +86 -86
- package/src/bmb/workflows/module/steps-b/step-07-value.md +76 -76
- package/src/bmb/workflows/module/steps-b/step-08-agents.md +97 -97
- package/src/bmb/workflows/module/steps-b/step-09-workflows.md +83 -83
- package/src/bmb/workflows/module/steps-b/step-10-tools.md +91 -91
- package/src/bmb/workflows/module/steps-b/step-11-scenarios.md +84 -84
- package/src/bmb/workflows/module/steps-b/step-12-creative.md +95 -95
- package/src/bmb/workflows/module/steps-b/step-13-review.md +105 -105
- package/src/bmb/workflows/module/steps-b/step-14-finalize.md +117 -117
- package/src/bmb/workflows/module/steps-c/step-01-load-brief.md +179 -179
- package/src/bmb/workflows/module/steps-c/step-01b-continue.md +82 -82
- package/src/bmb/workflows/module/steps-c/step-02-structure.md +105 -105
- package/src/bmb/workflows/module/steps-c/step-03-config.md +119 -119
- package/src/bmb/workflows/module/steps-c/step-04-agents.md +168 -168
- package/src/bmb/workflows/module/steps-c/step-05-workflows.md +184 -184
- package/src/bmb/workflows/module/steps-c/step-06-docs.md +401 -401
- package/src/bmb/workflows/module/steps-c/step-07-complete.md +152 -152
- package/src/bmb/workflows/module/steps-e/step-01-load-target.md +81 -81
- package/src/bmb/workflows/module/steps-e/step-02-select-edit.md +77 -77
- package/src/bmb/workflows/module/steps-e/step-03-apply-edit.md +77 -77
- package/src/bmb/workflows/module/steps-e/step-04-review.md +80 -80
- package/src/bmb/workflows/module/steps-e/step-05-confirm.md +75 -75
- package/src/bmb/workflows/module/steps-v/step-01-load-target.md +96 -96
- package/src/bmb/workflows/module/steps-v/step-02-file-structure.md +93 -93
- package/src/bmb/workflows/module/steps-v/step-03-module-yaml.md +99 -99
- package/src/bmb/workflows/module/steps-v/step-04-agent-specs.md +152 -152
- package/src/bmb/workflows/module/steps-v/step-05-workflow-specs.md +152 -152
- package/src/bmb/workflows/module/steps-v/step-06-documentation.md +143 -143
- package/src/bmb/workflows/module/steps-v/step-07-installation.md +102 -102
- package/src/bmb/workflows/module/steps-v/step-08-report.md +197 -197
- package/src/bmb/workflows/module/templates/brief-template.md +154 -154
- package/src/bmb/workflows/module/templates/workflow-spec-template.md +96 -96
- package/src/bmb/workflows/module/workflow-create-module-brief.md +71 -71
- package/src/bmb/workflows/module/workflow-create-module.md +86 -86
- package/src/bmb/workflows/module/workflow-edit-module.md +66 -66
- package/src/bmb/workflows/module/workflow-validate-module.md +66 -66
- package/src/bmb/workflows/workflow/data/architecture.md +150 -150
- package/src/bmb/workflows/workflow/data/common-workflow-tools.csv +19 -19
- package/src/bmb/workflows/workflow/data/csv-data-file-standards.md +53 -53
- package/src/bmb/workflows/workflow/data/frontmatter-standards.md +184 -184
- package/src/bmb/workflows/workflow/data/input-discovery-standards.md +191 -191
- package/src/bmb/workflows/workflow/data/intent-vs-prescriptive-spectrum.md +44 -44
- package/src/bmb/workflows/workflow/data/menu-handling-standards.md +133 -133
- package/src/bmb/workflows/workflow/data/output-format-standards.md +135 -135
- package/src/bmb/workflows/workflow/data/step-file-rules.md +235 -235
- package/src/bmb/workflows/workflow/data/step-type-patterns.md +257 -257
- package/src/bmb/workflows/workflow/data/subprocess-optimization-patterns.md +188 -188
- package/src/bmb/workflows/workflow/data/trimodal-workflow-structure.md +164 -164
- package/src/bmb/workflows/workflow/data/workflow-chaining-standards.md +222 -222
- package/src/bmb/workflows/workflow/data/workflow-examples.md +232 -232
- package/src/bmb/workflows/workflow/data/workflow-type-criteria.md +134 -134
- package/src/bmb/workflows/workflow/steps-c/step-00-conversion.md +263 -263
- package/src/bmb/workflows/workflow/steps-c/step-01-discovery.md +194 -194
- package/src/bmb/workflows/workflow/steps-c/step-01b-continuation.md +3 -3
- package/src/bmb/workflows/workflow/steps-c/step-02-classification.md +270 -270
- package/src/bmb/workflows/workflow/steps-c/step-03-requirements.md +283 -283
- package/src/bmb/workflows/workflow/steps-c/step-04-tools.md +282 -282
- package/src/bmb/workflows/workflow/steps-c/step-05-plan-review.md +243 -243
- package/src/bmb/workflows/workflow/steps-c/step-06-design.md +330 -330
- package/src/bmb/workflows/workflow/steps-c/step-07-foundation.md +239 -239
- package/src/bmb/workflows/workflow/steps-c/step-08-build-step-01.md +379 -379
- package/src/bmb/workflows/workflow/steps-c/step-09-build-next-step.md +350 -350
- package/src/bmb/workflows/workflow/steps-c/step-10-confirmation.md +322 -322
- package/src/bmb/workflows/workflow/steps-c/step-11-completion.md +191 -191
- package/src/bmb/workflows/workflow/steps-e/step-e-01-assess-workflow.md +237 -237
- package/src/bmb/workflows/workflow/steps-e/step-e-02-discover-edits.md +251 -251
- package/src/bmb/workflows/workflow/steps-e/step-e-03-fix-validation.md +254 -254
- package/src/bmb/workflows/workflow/steps-e/step-e-04-direct-edit.md +277 -277
- package/src/bmb/workflows/workflow/steps-e/step-e-05-apply-edit.md +154 -154
- package/src/bmb/workflows/workflow/steps-e/step-e-06-validate-after.md +190 -190
- package/src/bmb/workflows/workflow/steps-e/step-e-07-complete.md +206 -206
- package/src/bmb/workflows/workflow/steps-v/step-01-validate-max-mode.md +109 -109
- package/src/bmb/workflows/workflow/steps-v/step-01-validate.md +221 -221
- package/src/bmb/workflows/workflow/steps-v/step-01b-structure.md +152 -152
- package/src/bmb/workflows/workflow/steps-v/step-02-frontmatter-validation.md +199 -199
- package/src/bmb/workflows/workflow/steps-v/step-02b-path-violations.md +265 -265
- package/src/bmb/workflows/workflow/steps-v/step-03-menu-validation.md +164 -164
- package/src/bmb/workflows/workflow/steps-v/step-04-step-type-validation.md +211 -211
- package/src/bmb/workflows/workflow/steps-v/step-05-output-format-validation.md +200 -200
- package/src/bmb/workflows/workflow/steps-v/step-06-validation-design-check.md +195 -195
- package/src/bmb/workflows/workflow/steps-v/step-07-instruction-style-check.md +209 -209
- package/src/bmb/workflows/workflow/steps-v/step-08-collaborative-experience-check.md +199 -199
- package/src/bmb/workflows/workflow/steps-v/step-08b-subprocess-optimization.md +179 -179
- package/src/bmb/workflows/workflow/steps-v/step-09-cohesive-review.md +186 -186
- package/src/bmb/workflows/workflow/steps-v/step-10-report-complete.md +154 -154
- package/src/bmb/workflows/workflow/steps-v/step-11-plan-validation.md +237 -237
- package/src/bmb/workflows/workflow/templates/minimal-output-template.md +11 -11
- package/src/bmb/workflows/workflow/templates/step-01-init-continuable-template.md +241 -241
- package/src/bmb/workflows/workflow/templates/step-1b-template.md +224 -224
- package/src/bmb/workflows/workflow/templates/step-template.md +294 -294
- package/src/bmb/workflows/workflow/templates/workflow-template.md +102 -102
- package/src/bmb/workflows/workflow/workflow-create-workflow.md +79 -79
- package/src/bmb/workflows/workflow/workflow-edit-workflow.md +65 -65
- package/src/bmb/workflows/workflow/workflow-rework-workflow.md +65 -65
- package/src/bmb/workflows/workflow/workflow-validate-max-parallel-workflow.md +66 -66
- package/src/bmb/workflows/workflow/workflow-validate-workflow.md +65 -65
- package/src/bmm/agents/analyst.md +104 -104
- package/src/bmm/agents/dev.md +100 -100
- package/src/bmm/agents/qa.md +100 -90
- package/src/bmm/agents/review-agent.md +1 -1
- package/src/bmm/agents/tech-writer/tech-writer.md +94 -94
- package/src/bmm/module-help.csv +31 -31
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +115 -115
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +107 -107
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +141 -141
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +144 -144
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +147 -147
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +161 -161
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +99 -99
- package/src/bmm/workflows/1-analysis/create-product-brief/workflow.md +57 -57
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +87 -87
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +156 -156
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +165 -165
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +140 -140
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +152 -152
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +345 -345
- package/src/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +92 -92
- package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +164 -164
- package/src/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +174 -174
- package/src/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +184 -184
- package/src/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +105 -105
- package/src/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +360 -360
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +87 -87
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +165 -165
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +174 -174
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +141 -141
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +159 -159
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +387 -387
- package/src/bmm/workflows/1-analysis/research/workflow-domain-research.md +54 -54
- package/src/bmm/workflows/1-analysis/research/workflow-market-research.md +54 -54
- package/src/bmm/workflows/1-analysis/research/workflow-technical-research.md +54 -54
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01b-continue.md +100 -100
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02-discovery.md +160 -160
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02b-vision.md +88 -88
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02c-executive-summary.md +99 -99
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-03-success.md +169 -169
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-04-journeys.md +156 -156
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-05-domain.md +136 -136
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-06-innovation.md +176 -176
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-07-project-type.md +184 -184
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-08-scoping.md +174 -174
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-09-functional.md +175 -175
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-10-nonfunctional.md +189 -189
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-11-polish.md +162 -162
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md +79 -79
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01-discovery.md +183 -183
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01b-legacy-conversion.md +149 -149
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-02-review.md +187 -187
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-03-edit.md +192 -192
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-04-complete.md +108 -108
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +166 -166
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02-format-detection.md +131 -131
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02b-parity-check.md +150 -150
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-03-density-validation.md +118 -118
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-04-brief-coverage-validation.md +155 -155
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-05-measurability-validation.md +170 -170
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-06-traceability-validation.md +158 -158
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-07-implementation-leakage-validation.md +147 -147
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-08-domain-compliance-validation.md +182 -182
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-09-project-type-validation.md +202 -202
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +148 -148
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +201 -201
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-12-completeness-validation.md +179 -179
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +164 -164
- package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md +65 -65
- package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-edit-prd.md +65 -65
- package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md +63 -63
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +63 -63
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +106 -106
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +111 -111
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +115 -115
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +127 -127
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +167 -167
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +143 -143
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +118 -118
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +154 -154
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +136 -136
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +165 -165
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +135 -135
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +192 -192
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +101 -101
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +45 -45
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +185 -185
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +129 -129
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +130 -130
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +93 -93
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +196 -196
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +129 -129
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +54 -54
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md +82 -82
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +106 -106
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +138 -138
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +129 -129
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +166 -166
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +186 -186
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +163 -163
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +38 -38
- package/src/bmm/workflows/3-solutioning/create-architecture/workflow.md +49 -49
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +124 -124
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +122 -122
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +84 -84
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +58 -58
- package/src/bmm/workflows/4-implementation/code-review/workflow.yaml +43 -43
- package/src/bmm/workflows/4-implementation/correct-course/workflow.yaml +53 -53
- package/src/bmm/workflows/4-implementation/create-story/checklist.md +159 -159
- package/src/bmm/workflows/4-implementation/create-story/template.md +79 -79
- package/src/bmm/workflows/4-implementation/create-story/workflow.yaml +52 -52
- package/src/bmm/workflows/4-implementation/dev-story/workflow.yaml +20 -20
- package/src/bmm/workflows/4-implementation/retrospective/workflow.yaml +52 -52
- package/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +52 -52
- package/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml +25 -25
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +158 -158
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +122 -122
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +93 -93
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +93 -93
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +87 -87
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md +146 -146
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +50 -50
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md +152 -152
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md +123 -123
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md +201 -201
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +79 -79
- package/src/bmm/workflows/document-project/workflow.yaml +22 -22
- package/src/bmm/workflows/generate-project-context/steps/step-01-discover.md +184 -184
- package/src/bmm/workflows/generate-project-context/steps/step-02-generate.md +322 -322
- package/src/bmm/workflows/generate-project-context/steps/step-03-complete.md +235 -235
- package/src/bmm/workflows/generate-project-context/workflow.md +49 -49
- package/src/bmm/workflows/qa/automate/workflow.yaml +233 -233
- package/src/bmm/workflows/qa-generate-e2e-tests/workflow.yaml +42 -42
- package/src/core/agents/master-orchestrator.md +3 -3
- package/src/core/config.yaml +9 -9
- package/src/core/module-help.csv +10 -10
- package/src/core/scripts/generate-loop-report.py +72 -72
- package/src/core/tasks/editorial-review-prose.xml +101 -101
- package/src/core/tasks/editorial-review-structure.xml +207 -207
- package/src/core/tasks/help.md +86 -86
- package/src/core/tasks/index-docs.xml +64 -64
- package/src/core/tasks/review-adversarial-general.xml +66 -66
- package/src/core/tasks/review-adversarial-loop.xml +46 -46
- package/src/core/tasks/review-edge-case-hunter.xml +63 -63
- package/src/core/tasks/review-party-loop.xml +46 -46
- package/src/core/tasks/shard-doc.xml +107 -107
- package/src/core/tasks/workflow.xml +235 -235
- package/src/core/templates/review-loop-report.html +88 -88
- package/src/core/templates/review-loop-report.md +5 -5
- package/src/core/workflows/advanced-elicitation/workflow.xml +117 -117
- package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +212 -212
- package/src/core/workflows/brainstorming/steps/step-01b-continue.md +122 -122
- package/src/core/workflows/brainstorming/steps/step-02a-user-selected.md +225 -225
- package/src/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +237 -237
- package/src/core/workflows/brainstorming/steps/step-02c-random-selection.md +209 -209
- package/src/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +264 -264
- package/src/core/workflows/brainstorming/steps/step-02e-deep-dive.md +68 -68
- package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +403 -403
- package/src/core/workflows/brainstorming/steps/step-04-idea-organization.md +303 -303
- package/src/core/workflows/brainstorming/workflow.md +60 -60
- package/src/core/workflows/extract-trackers/workflow.md +45 -45
- package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +142 -142
- package/src/core/workflows/party-mode/workflow.md +194 -194
- package/src/docs/dev/tmux/actions_popup.py +291 -291
- package/src/docs/dev/tmux/tmux-setup.md +62 -1
|
@@ -1,425 +1,425 @@
|
|
|
1
|
-
# Core ML Model Conversion Reference
|
|
2
|
-
|
|
3
|
-
Complete reference for converting models to Core ML format using coremltools.
|
|
4
|
-
|
|
5
|
-
## Contents
|
|
6
|
-
|
|
7
|
-
- [coremltools Installation](#coremltools-installation)
|
|
8
|
-
- [Architecture Overview](#architecture-overview)
|
|
9
|
-
- [Model Formats](#model-formats)
|
|
10
|
-
- [Unified Conversion API](#unified-conversion-api)
|
|
11
|
-
- [Converting from PyTorch](#converting-from-pytorch)
|
|
12
|
-
- [Converting from TensorFlow](#converting-from-tensorflow)
|
|
13
|
-
- [Converting from scikit-learn](#converting-from-scikit-learn)
|
|
14
|
-
- [Converting from XGBoost](#converting-from-xgboost)
|
|
15
|
-
- [ONNX Conversion (Deprecated)](#onnx-conversion-deprecated)
|
|
16
|
-
- [Input and Output Types](#input-and-output-types)
|
|
17
|
-
- [Flexible Input Shapes](#flexible-input-shapes)
|
|
18
|
-
- [Deployment Targets](#deployment-targets)
|
|
19
|
-
- [Compute Precision](#compute-precision)
|
|
20
|
-
- [Compute Units](#compute-units)
|
|
21
|
-
- [Stateful Models (iOS 18+)](#stateful-models-ios-18)
|
|
22
|
-
- [Multifunction Models (iOS 18+)](#multifunction-models-ios-18)
|
|
23
|
-
- [Model Utilities](#model-utilities)
|
|
24
|
-
- [Graph Pass Control](#graph-pass-control)
|
|
25
|
-
- [Custom Composite Operators](#custom-composite-operators)
|
|
26
|
-
- [Common Mistakes to Avoid](#common-mistakes-to-avoid)
|
|
27
|
-
|
|
28
|
-
## coremltools Installation
|
|
29
|
-
|
|
30
|
-
```bash
|
|
31
|
-
pip install coremltools
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
Current version: 9.0 (November 2025). Requires Python 3.10-3.13.
|
|
35
|
-
|
|
36
|
-
## Architecture Overview
|
|
37
|
-
|
|
38
|
-
```text
|
|
39
|
-
Your App (SwiftUI / UIKit)
|
|
40
|
-
|-- Vision, Natural Language, SoundAnalysis, Foundation Models
|
|
41
|
-
|-- Core ML (model loading, prediction, compilation)
|
|
42
|
-
|-- Metal Performance Shaders Graph (GPU) / Accelerate (CPU) / Neural Engine (ANE)
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
## Model Formats
|
|
46
|
-
|
|
47
|
-
| Format | Extension | Model Type | When to Use |
|
|
48
|
-
|---|---|---|---|
|
|
49
|
-
| `.mlpackage` | Directory | mlprogram | All new models (iOS 15+) |
|
|
50
|
-
| `.mlmodel` | Single file | neuralnetwork | Legacy only (iOS 11-14) |
|
|
51
|
-
| `.mlmodelc` | Compiled | Either | Pre-compiled for faster loading |
|
|
52
|
-
|
|
53
|
-
Always use mlprogram (.mlpackage) for new work. Neural network format is frozen
|
|
54
|
-
and receives no new features.
|
|
55
|
-
|
|
56
|
-
### mlprogram vs neuralnetwork
|
|
57
|
-
|
|
58
|
-
| Aspect | neuralnetwork | mlprogram |
|
|
59
|
-
|---|---|---|
|
|
60
|
-
| GPU precision | Float16 only | Float16 and Float32 |
|
|
61
|
-
| Optimization APIs | Limited | Full (quantize, palettize, prune) |
|
|
62
|
-
| Stateful models | No | Yes (iOS 18+) |
|
|
63
|
-
| Multifunction models | No | Yes (iOS 18+) |
|
|
64
|
-
| On-device training | Supported | Not supported |
|
|
65
|
-
| Weight storage | Embedded in protobuf | Separated (memory-efficient) |
|
|
66
|
-
|
|
67
|
-
## Unified Conversion API
|
|
68
|
-
|
|
69
|
-
```python
|
|
70
|
-
import coremltools as ct
|
|
71
|
-
|
|
72
|
-
mlmodel = ct.convert(
|
|
73
|
-
model, # PyTorch traced/exported model or TF model
|
|
74
|
-
source='auto', # 'auto', 'pytorch', 'tensorflow'
|
|
75
|
-
inputs=None, # list of TensorType/ImageType
|
|
76
|
-
outputs=None, # list of TensorType/ImageType
|
|
77
|
-
minimum_deployment_target=None, # ct.target.iOS15 through ct.target.iOS26
|
|
78
|
-
convert_to='mlprogram', # 'mlprogram' (default) or 'neuralnetwork'
|
|
79
|
-
compute_precision=None, # ct.precision.FLOAT16 (default), FLOAT32
|
|
80
|
-
compute_units=ct.ComputeUnit.ALL,
|
|
81
|
-
skip_model_load=False, # True when converting on Linux
|
|
82
|
-
states=None, # list of StateType for stateful models
|
|
83
|
-
pass_pipeline=None, # PassPipeline for graph optimization
|
|
84
|
-
)
|
|
85
|
-
mlmodel.save("Model.mlpackage")
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
## Converting from PyTorch
|
|
89
|
-
|
|
90
|
-
### torch.jit.trace (Recommended)
|
|
91
|
-
|
|
92
|
-
```python
|
|
93
|
-
import torch
|
|
94
|
-
import coremltools as ct
|
|
95
|
-
|
|
96
|
-
model = MyModel()
|
|
97
|
-
model.eval() # CRITICAL: always call eval() before tracing
|
|
98
|
-
|
|
99
|
-
example_input = torch.rand(1, 3, 224, 224)
|
|
100
|
-
traced_model = torch.jit.trace(model, example_input)
|
|
101
|
-
|
|
102
|
-
mlmodel = ct.convert(
|
|
103
|
-
traced_model,
|
|
104
|
-
inputs=[ct.TensorType(shape=example_input.shape, name="input")],
|
|
105
|
-
minimum_deployment_target=ct.target.iOS16,
|
|
106
|
-
)
|
|
107
|
-
mlmodel.save("MyModel.mlpackage")
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### torch.export (Beta)
|
|
111
|
-
|
|
112
|
-
```python
|
|
113
|
-
import torch
|
|
114
|
-
import coremltools as ct
|
|
115
|
-
|
|
116
|
-
model.eval()
|
|
117
|
-
example_inputs = (torch.rand(1, 3, 224, 224),)
|
|
118
|
-
|
|
119
|
-
# Dynamic shapes defined at export time
|
|
120
|
-
batch_dim = torch.export.Dim(name="batch", min=1, max=128)
|
|
121
|
-
exported = torch.export.export(model, example_inputs,
|
|
122
|
-
dynamic_shapes={"x": {0: batch_dim}})
|
|
123
|
-
|
|
124
|
-
mlmodel = ct.convert(exported)
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
Key difference: `torch.export` defines dynamic shapes upfront (auto-converted
|
|
128
|
-
to RangeDim). `torch.jit.trace` defines shapes in `ct.convert()` via
|
|
129
|
-
RangeDim/EnumeratedShapes.
|
|
130
|
-
|
|
131
|
-
## Converting from TensorFlow
|
|
132
|
-
|
|
133
|
-
```python
|
|
134
|
-
import tensorflow as tf
|
|
135
|
-
import coremltools as ct
|
|
136
|
-
|
|
137
|
-
# Keras model
|
|
138
|
-
tf_model = tf.keras.applications.MobileNetV2()
|
|
139
|
-
mlmodel = ct.convert(tf_model)
|
|
140
|
-
|
|
141
|
-
# SavedModel directory
|
|
142
|
-
mlmodel = ct.convert("/path/to/saved_model/")
|
|
143
|
-
|
|
144
|
-
# HDF5 file
|
|
145
|
-
mlmodel = ct.convert("/path/to/model.h5")
|
|
146
|
-
|
|
147
|
-
# Frozen graph (.pb)
|
|
148
|
-
mlmodel = ct.convert("frozen_graph.pb",
|
|
149
|
-
inputs=[ct.TensorType(shape=(1, 224, 224, 3))])
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
## Converting from scikit-learn
|
|
153
|
-
|
|
154
|
-
```python
|
|
155
|
-
from sklearn.linear_model import LinearRegression
|
|
156
|
-
import coremltools as ct
|
|
157
|
-
|
|
158
|
-
model = LinearRegression()
|
|
159
|
-
model.fit(X_train, y_train)
|
|
160
|
-
|
|
161
|
-
mlmodel = ct.converters.sklearn.convert(
|
|
162
|
-
model, ["feature1", "feature2"], "prediction"
|
|
163
|
-
)
|
|
164
|
-
mlmodel.save("Regressor.mlmodel")
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
## Converting from XGBoost
|
|
168
|
-
|
|
169
|
-
```python
|
|
170
|
-
import xgboost
|
|
171
|
-
import coremltools as ct
|
|
172
|
-
|
|
173
|
-
model = xgboost.XGBClassifier()
|
|
174
|
-
model.fit(X_train, y_train)
|
|
175
|
-
mlmodel = ct.converters.xgboost.convert(model)
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
## ONNX Conversion (Deprecated)
|
|
179
|
-
|
|
180
|
-
ONNX direct conversion is deprecated since coremltools 6. Convert from the
|
|
181
|
-
original framework (PyTorch or TensorFlow) instead. If you only have an ONNX
|
|
182
|
-
file, convert back to PyTorch first using `onnx2torch`.
|
|
183
|
-
|
|
184
|
-
## Input and Output Types
|
|
185
|
-
|
|
186
|
-
### TensorType
|
|
187
|
-
|
|
188
|
-
```python
|
|
189
|
-
ct.TensorType(
|
|
190
|
-
name="input", # must match model input name
|
|
191
|
-
shape=(1, 3, 224, 224), # tuple of int, RangeDim, or EnumeratedShapes
|
|
192
|
-
dtype=np.float32, # np.float32, np.float16, np.int32, np.int8 (iOS26+)
|
|
193
|
-
default_value=None, # np.ndarray: makes input optional at runtime
|
|
194
|
-
)
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
### ImageType
|
|
198
|
-
|
|
199
|
-
```python
|
|
200
|
-
ct.ImageType(
|
|
201
|
-
name="image",
|
|
202
|
-
shape=(1, 3, 224, 224),
|
|
203
|
-
scale=1/255.0, # per-channel scaling
|
|
204
|
-
bias=[-0.485/0.229, -0.456/0.224, -0.406/0.225], # ImageNet normalization
|
|
205
|
-
color_layout=ct.colorlayout.RGB, # RGB, BGR, GRAYSCALE, GRAYSCALE_FLOAT16
|
|
206
|
-
channel_first=True, # True for PyTorch (NCHW), False for TF (NHWC)
|
|
207
|
-
)
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
### StateType (iOS 18+)
|
|
211
|
-
|
|
212
|
-
```python
|
|
213
|
-
ct.StateType(
|
|
214
|
-
wrapped_type=ct.TensorType(shape=(1, 8, 128, 64), dtype=np.float16),
|
|
215
|
-
name="kv_cache",
|
|
216
|
-
)
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
## Flexible Input Shapes
|
|
220
|
-
|
|
221
|
-
### Fixed Shape
|
|
222
|
-
|
|
223
|
-
```python
|
|
224
|
-
inputs=[ct.TensorType(shape=(1, 3, 224, 224))]
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
### RangeDim (Variable Dimensions)
|
|
228
|
-
|
|
229
|
-
```python
|
|
230
|
-
inputs=[ct.TensorType(shape=(
|
|
231
|
-
1, 3,
|
|
232
|
-
ct.RangeDim(lower_bound=128, upper_bound=512, default=224),
|
|
233
|
-
ct.RangeDim(lower_bound=128, upper_bound=512, default=224),
|
|
234
|
-
))]
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
### EnumeratedShapes (Best Performance)
|
|
238
|
-
|
|
239
|
-
```python
|
|
240
|
-
inputs=[ct.TensorType(shape=ct.EnumeratedShapes(
|
|
241
|
-
shapes=[(1,3,224,224), (1,3,384,384), (1,3,512,512)],
|
|
242
|
-
default=(1,3,224,224),
|
|
243
|
-
))]
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
**Rule:** Prefer EnumeratedShapes over RangeDim when you have a known set of
|
|
247
|
-
sizes. EnumeratedShapes allows the Neural Engine to optimize for each shape at
|
|
248
|
-
compilation time. RangeDim only optimizes for the default shape.
|
|
249
|
-
|
|
250
|
-
**Rule:** Before iOS 18, only ONE input can use EnumeratedShapes. Starting
|
|
251
|
-
iOS 18, multiple inputs can use EnumeratedShapes.
|
|
252
|
-
|
|
253
|
-
## Deployment Targets
|
|
254
|
-
|
|
255
|
-
| Target | Model Type | Key Feature Unlocks |
|
|
256
|
-
|---|---|---|
|
|
257
|
-
| `ct.target.iOS13` | neuralnetwork | Basic neural network |
|
|
258
|
-
| `ct.target.iOS15` | mlprogram | FP16 precision, typed tensors |
|
|
259
|
-
| `ct.target.iOS16` | mlprogram | Palettized weights, sparse weights |
|
|
260
|
-
| `ct.target.iOS17` | mlprogram | W8A8 activation quantization (A17 Pro+) |
|
|
261
|
-
| `ct.target.iOS18` | mlprogram | Stateful models, multifunction, per-block quantization |
|
|
262
|
-
| `ct.target.iOS26` | mlprogram | INT8 I/O dtype, state read/write |
|
|
263
|
-
|
|
264
|
-
Corresponding macOS targets: `macOS10_15`, `macOS12`, `macOS13`, `macOS14`,
|
|
265
|
-
`macOS15`, `macOS26`.
|
|
266
|
-
|
|
267
|
-
## Compute Precision
|
|
268
|
-
|
|
269
|
-
| Value | Description |
|
|
270
|
-
|---|---|
|
|
271
|
-
| `ct.precision.FLOAT16` | Default for mlprogram. Smaller, faster. |
|
|
272
|
-
| `ct.precision.FLOAT32` | Higher accuracy. Use when FP16 causes issues. |
|
|
273
|
-
|
|
274
|
-
### Mixed Precision (Selective Per-Op)
|
|
275
|
-
|
|
276
|
-
```python
|
|
277
|
-
def keep_layernorm_fp32(op):
|
|
278
|
-
if op.op_type == "layer_norm":
|
|
279
|
-
return False # keep in FP32
|
|
280
|
-
return True # convert to FP16
|
|
281
|
-
|
|
282
|
-
mlmodel = ct.convert(model,
|
|
283
|
-
compute_precision=ct.transform.FP16ComputePrecision(
|
|
284
|
-
op_selector=keep_layernorm_fp32
|
|
285
|
-
))
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
## Compute Units
|
|
289
|
-
|
|
290
|
-
| Value | Description | When to Use |
|
|
291
|
-
|---|---|---|
|
|
292
|
-
| `.all` | CPU + GPU + Neural Engine | Default, recommended |
|
|
293
|
-
| `.cpuOnly` | CPU exclusively | Debugging, FP32 accuracy |
|
|
294
|
-
| `.cpuAndGPU` | CPU and GPU, no ANE | When ANE causes issues |
|
|
295
|
-
| `.cpuAndNeuralEngine` | CPU and ANE, no GPU | Energy efficiency (macOS 13+) |
|
|
296
|
-
|
|
297
|
-
## Stateful Models (iOS 18+)
|
|
298
|
-
|
|
299
|
-
Persist intermediate values across inference runs. Critical for LLM KV-cache.
|
|
300
|
-
|
|
301
|
-
### Python Conversion
|
|
302
|
-
|
|
303
|
-
```python
|
|
304
|
-
mlmodel = ct.convert(
|
|
305
|
-
traced_model,
|
|
306
|
-
inputs=[ct.TensorType(shape=(1,), name="x")],
|
|
307
|
-
outputs=[ct.TensorType(name="y")],
|
|
308
|
-
states=[ct.StateType(
|
|
309
|
-
wrapped_type=ct.TensorType(shape=(1,)),
|
|
310
|
-
name="accumulator",
|
|
311
|
-
)],
|
|
312
|
-
minimum_deployment_target=ct.target.iOS18,
|
|
313
|
-
)
|
|
314
|
-
|
|
315
|
-
# Python prediction with state
|
|
316
|
-
state = mlmodel.make_state()
|
|
317
|
-
result = mlmodel.predict({"x": np.array([2.0])}, state=state)
|
|
318
|
-
```
|
|
319
|
-
|
|
320
|
-
### Swift Usage
|
|
321
|
-
|
|
322
|
-
```swift
|
|
323
|
-
let model = try MLModel(contentsOf: modelURL, configuration: config)
|
|
324
|
-
let state = model.makeState()
|
|
325
|
-
let input = try MLDictionaryFeatureProvider(
|
|
326
|
-
dictionary: ["x": MLFeatureValue(double: 2.0)]
|
|
327
|
-
)
|
|
328
|
-
let output = try model.prediction(from: input, using: state)
|
|
329
|
-
```
|
|
330
|
-
|
|
331
|
-
Impact: Llama 3.1 with stateful KV-cache achieves 16.26 tokens/s vs 1.25
|
|
332
|
-
tokens/s without (13x improvement).
|
|
333
|
-
|
|
334
|
-
## Multifunction Models (iOS 18+)
|
|
335
|
-
|
|
336
|
-
Pack multiple model functions (e.g., LoRA adapters) into a single .mlpackage.
|
|
337
|
-
Shared weights are deduplicated.
|
|
338
|
-
|
|
339
|
-
```python
|
|
340
|
-
desc = ct.utils.MultiFunctionDescriptor()
|
|
341
|
-
desc.add_function("base.mlpackage", src_function_name="main",
|
|
342
|
-
target_function_name="base")
|
|
343
|
-
desc.add_function("adapter1.mlpackage", src_function_name="main",
|
|
344
|
-
target_function_name="style_1")
|
|
345
|
-
desc.default_function_name = "base"
|
|
346
|
-
ct.utils.save_multifunction(desc, "combined.mlpackage")
|
|
347
|
-
```
|
|
348
|
-
|
|
349
|
-
```swift
|
|
350
|
-
let config = MLModelConfiguration()
|
|
351
|
-
config.functionName = "style_1"
|
|
352
|
-
let model = try MLModel(contentsOf: modelURL, configuration: config)
|
|
353
|
-
```
|
|
354
|
-
|
|
355
|
-
## Model Utilities
|
|
356
|
-
|
|
357
|
-
```python
|
|
358
|
-
# Inspect model
|
|
359
|
-
spec = mlmodel.get_spec()
|
|
360
|
-
print(spec.description)
|
|
361
|
-
|
|
362
|
-
# Rename inputs/outputs
|
|
363
|
-
ct.utils.rename_feature(spec, "old_name", "new_name")
|
|
364
|
-
|
|
365
|
-
# Set metadata
|
|
366
|
-
mlmodel.author = "Author"
|
|
367
|
-
mlmodel.short_description = "Description"
|
|
368
|
-
mlmodel.input_description["image"] = "RGB image 224x224"
|
|
369
|
-
|
|
370
|
-
# Split large models for debugging
|
|
371
|
-
ct.models.utils.bisect_model("large.mlpackage", "./output/")
|
|
372
|
-
|
|
373
|
-
# Create pipeline from multiple models
|
|
374
|
-
pipeline = ct.models.utils.make_pipeline(model1, model2)
|
|
375
|
-
|
|
376
|
-
# Randomize weights (for testing)
|
|
377
|
-
random_model = ct.models.utils.randomize_weights(mlmodel)
|
|
378
|
-
```
|
|
379
|
-
|
|
380
|
-
## Graph Pass Control
|
|
381
|
-
|
|
382
|
-
```python
|
|
383
|
-
# Skip specific optimization passes
|
|
384
|
-
pipeline = ct.PassPipeline()
|
|
385
|
-
pipeline.remove_passes({"common::fuse_conv_batchnorm"})
|
|
386
|
-
mlmodel = ct.convert(model, pass_pipeline=pipeline)
|
|
387
|
-
|
|
388
|
-
# Predefined pipelines
|
|
389
|
-
ct.PassPipeline.EMPTY # no passes
|
|
390
|
-
ct.PassPipeline.CLEANUP # minimal cleanup
|
|
391
|
-
ct.PassPipeline.DEFAULT_PRUNING # optimized for pruned models
|
|
392
|
-
ct.PassPipeline.DEFAULT_PALETTIZATION # optimized for palettized models
|
|
393
|
-
```
|
|
394
|
-
|
|
395
|
-
## Custom Composite Operators
|
|
396
|
-
|
|
397
|
-
When PyTorch uses ops not natively supported:
|
|
398
|
-
|
|
399
|
-
```python
|
|
400
|
-
from coremltools.converters.mil.frontend.torch.torch_op_registry import register_torch_op
|
|
401
|
-
from coremltools.converters.mil.frontend.torch.ops import _get_inputs
|
|
402
|
-
from coremltools.converters.mil import Builder as mb
|
|
403
|
-
|
|
404
|
-
@register_torch_op
|
|
405
|
-
def selu(context, node):
|
|
406
|
-
x = _get_inputs(context, node, expected=1)[0]
|
|
407
|
-
x = mb.elu(x=x, alpha=1.6732632423543772)
|
|
408
|
-
x = mb.mul(x=x, y=1.0507009873554805, name=node.name)
|
|
409
|
-
context.add(x)
|
|
410
|
-
```
|
|
411
|
-
|
|
412
|
-
## Common Mistakes to Avoid
|
|
413
|
-
|
|
414
|
-
1. **Forgetting model.eval().** PyTorch models MUST be in eval mode before
|
|
415
|
-
tracing or exporting.
|
|
416
|
-
2. **Using RangeDim when EnumeratedShapes would work.** Known input sizes
|
|
417
|
-
should use EnumeratedShapes for better Neural Engine performance.
|
|
418
|
-
3. **Targeting neuralnetwork format for new models.** Always use mlprogram.
|
|
419
|
-
4. **Not specifying minimum_deployment_target.** Always set it explicitly.
|
|
420
|
-
5. **Using Float32 when Float16 suffices.** Float16 is the default and correct
|
|
421
|
-
for most models.
|
|
422
|
-
6. **Converting from ONNX directly.** ONNX conversion is deprecated. Convert
|
|
423
|
-
from the original framework.
|
|
424
|
-
7. **Not testing on physical devices.** Simulator does not support Metal GPU
|
|
425
|
-
or Neural Engine.
|
|
1
|
+
# Core ML Model Conversion Reference
|
|
2
|
+
|
|
3
|
+
Complete reference for converting models to Core ML format using coremltools.
|
|
4
|
+
|
|
5
|
+
## Contents
|
|
6
|
+
|
|
7
|
+
- [coremltools Installation](#coremltools-installation)
|
|
8
|
+
- [Architecture Overview](#architecture-overview)
|
|
9
|
+
- [Model Formats](#model-formats)
|
|
10
|
+
- [Unified Conversion API](#unified-conversion-api)
|
|
11
|
+
- [Converting from PyTorch](#converting-from-pytorch)
|
|
12
|
+
- [Converting from TensorFlow](#converting-from-tensorflow)
|
|
13
|
+
- [Converting from scikit-learn](#converting-from-scikit-learn)
|
|
14
|
+
- [Converting from XGBoost](#converting-from-xgboost)
|
|
15
|
+
- [ONNX Conversion (Deprecated)](#onnx-conversion-deprecated)
|
|
16
|
+
- [Input and Output Types](#input-and-output-types)
|
|
17
|
+
- [Flexible Input Shapes](#flexible-input-shapes)
|
|
18
|
+
- [Deployment Targets](#deployment-targets)
|
|
19
|
+
- [Compute Precision](#compute-precision)
|
|
20
|
+
- [Compute Units](#compute-units)
|
|
21
|
+
- [Stateful Models (iOS 18+)](#stateful-models-ios-18)
|
|
22
|
+
- [Multifunction Models (iOS 18+)](#multifunction-models-ios-18)
|
|
23
|
+
- [Model Utilities](#model-utilities)
|
|
24
|
+
- [Graph Pass Control](#graph-pass-control)
|
|
25
|
+
- [Custom Composite Operators](#custom-composite-operators)
|
|
26
|
+
- [Common Mistakes to Avoid](#common-mistakes-to-avoid)
|
|
27
|
+
|
|
28
|
+
## coremltools Installation
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
pip install coremltools
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Current version: 9.0 (November 2025). Requires Python 3.10-3.13.
|
|
35
|
+
|
|
36
|
+
## Architecture Overview
|
|
37
|
+
|
|
38
|
+
```text
|
|
39
|
+
Your App (SwiftUI / UIKit)
|
|
40
|
+
|-- Vision, Natural Language, SoundAnalysis, Foundation Models
|
|
41
|
+
|-- Core ML (model loading, prediction, compilation)
|
|
42
|
+
|-- Metal Performance Shaders Graph (GPU) / Accelerate (CPU) / Neural Engine (ANE)
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Model Formats
|
|
46
|
+
|
|
47
|
+
| Format | Extension | Model Type | When to Use |
|
|
48
|
+
|---|---|---|---|
|
|
49
|
+
| `.mlpackage` | Directory | mlprogram | All new models (iOS 15+) |
|
|
50
|
+
| `.mlmodel` | Single file | neuralnetwork | Legacy only (iOS 11-14) |
|
|
51
|
+
| `.mlmodelc` | Compiled | Either | Pre-compiled for faster loading |
|
|
52
|
+
|
|
53
|
+
Always use mlprogram (.mlpackage) for new work. Neural network format is frozen
|
|
54
|
+
and receives no new features.
|
|
55
|
+
|
|
56
|
+
### mlprogram vs neuralnetwork
|
|
57
|
+
|
|
58
|
+
| Aspect | neuralnetwork | mlprogram |
|
|
59
|
+
|---|---|---|
|
|
60
|
+
| GPU precision | Float16 only | Float16 and Float32 |
|
|
61
|
+
| Optimization APIs | Limited | Full (quantize, palettize, prune) |
|
|
62
|
+
| Stateful models | No | Yes (iOS 18+) |
|
|
63
|
+
| Multifunction models | No | Yes (iOS 18+) |
|
|
64
|
+
| On-device training | Supported | Not supported |
|
|
65
|
+
| Weight storage | Embedded in protobuf | Separated (memory-efficient) |
|
|
66
|
+
|
|
67
|
+
## Unified Conversion API
|
|
68
|
+
|
|
69
|
+
```python
|
|
70
|
+
import coremltools as ct
|
|
71
|
+
|
|
72
|
+
mlmodel = ct.convert(
|
|
73
|
+
model, # PyTorch traced/exported model or TF model
|
|
74
|
+
source='auto', # 'auto', 'pytorch', 'tensorflow'
|
|
75
|
+
inputs=None, # list of TensorType/ImageType
|
|
76
|
+
outputs=None, # list of TensorType/ImageType
|
|
77
|
+
minimum_deployment_target=None, # ct.target.iOS15 through ct.target.iOS26
|
|
78
|
+
convert_to='mlprogram', # 'mlprogram' (default) or 'neuralnetwork'
|
|
79
|
+
compute_precision=None, # ct.precision.FLOAT16 (default), FLOAT32
|
|
80
|
+
compute_units=ct.ComputeUnit.ALL,
|
|
81
|
+
skip_model_load=False, # True when converting on Linux
|
|
82
|
+
states=None, # list of StateType for stateful models
|
|
83
|
+
pass_pipeline=None, # PassPipeline for graph optimization
|
|
84
|
+
)
|
|
85
|
+
mlmodel.save("Model.mlpackage")
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Converting from PyTorch
|
|
89
|
+
|
|
90
|
+
### torch.jit.trace (Recommended)
|
|
91
|
+
|
|
92
|
+
```python
|
|
93
|
+
import torch
|
|
94
|
+
import coremltools as ct
|
|
95
|
+
|
|
96
|
+
model = MyModel()
|
|
97
|
+
model.eval() # CRITICAL: always call eval() before tracing
|
|
98
|
+
|
|
99
|
+
example_input = torch.rand(1, 3, 224, 224)
|
|
100
|
+
traced_model = torch.jit.trace(model, example_input)
|
|
101
|
+
|
|
102
|
+
mlmodel = ct.convert(
|
|
103
|
+
traced_model,
|
|
104
|
+
inputs=[ct.TensorType(shape=example_input.shape, name="input")],
|
|
105
|
+
minimum_deployment_target=ct.target.iOS16,
|
|
106
|
+
)
|
|
107
|
+
mlmodel.save("MyModel.mlpackage")
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### torch.export (Beta)
|
|
111
|
+
|
|
112
|
+
```python
|
|
113
|
+
import torch
|
|
114
|
+
import coremltools as ct
|
|
115
|
+
|
|
116
|
+
model.eval()
|
|
117
|
+
example_inputs = (torch.rand(1, 3, 224, 224),)
|
|
118
|
+
|
|
119
|
+
# Dynamic shapes defined at export time
|
|
120
|
+
batch_dim = torch.export.Dim(name="batch", min=1, max=128)
|
|
121
|
+
exported = torch.export.export(model, example_inputs,
|
|
122
|
+
dynamic_shapes={"x": {0: batch_dim}})
|
|
123
|
+
|
|
124
|
+
mlmodel = ct.convert(exported)
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Key difference: `torch.export` defines dynamic shapes upfront (auto-converted
|
|
128
|
+
to RangeDim). `torch.jit.trace` defines shapes in `ct.convert()` via
|
|
129
|
+
RangeDim/EnumeratedShapes.
|
|
130
|
+
|
|
131
|
+
## Converting from TensorFlow
|
|
132
|
+
|
|
133
|
+
```python
|
|
134
|
+
import tensorflow as tf
|
|
135
|
+
import coremltools as ct
|
|
136
|
+
|
|
137
|
+
# Keras model
|
|
138
|
+
tf_model = tf.keras.applications.MobileNetV2()
|
|
139
|
+
mlmodel = ct.convert(tf_model)
|
|
140
|
+
|
|
141
|
+
# SavedModel directory
|
|
142
|
+
mlmodel = ct.convert("/path/to/saved_model/")
|
|
143
|
+
|
|
144
|
+
# HDF5 file
|
|
145
|
+
mlmodel = ct.convert("/path/to/model.h5")
|
|
146
|
+
|
|
147
|
+
# Frozen graph (.pb)
|
|
148
|
+
mlmodel = ct.convert("frozen_graph.pb",
|
|
149
|
+
inputs=[ct.TensorType(shape=(1, 224, 224, 3))])
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Converting from scikit-learn
|
|
153
|
+
|
|
154
|
+
```python
|
|
155
|
+
from sklearn.linear_model import LinearRegression
|
|
156
|
+
import coremltools as ct
|
|
157
|
+
|
|
158
|
+
model = LinearRegression()
|
|
159
|
+
model.fit(X_train, y_train)
|
|
160
|
+
|
|
161
|
+
mlmodel = ct.converters.sklearn.convert(
|
|
162
|
+
model, ["feature1", "feature2"], "prediction"
|
|
163
|
+
)
|
|
164
|
+
mlmodel.save("Regressor.mlmodel")
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## Converting from XGBoost
|
|
168
|
+
|
|
169
|
+
```python
|
|
170
|
+
import xgboost
|
|
171
|
+
import coremltools as ct
|
|
172
|
+
|
|
173
|
+
model = xgboost.XGBClassifier()
|
|
174
|
+
model.fit(X_train, y_train)
|
|
175
|
+
mlmodel = ct.converters.xgboost.convert(model)
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## ONNX Conversion (Deprecated)
|
|
179
|
+
|
|
180
|
+
ONNX direct conversion is deprecated since coremltools 6. Convert from the
|
|
181
|
+
original framework (PyTorch or TensorFlow) instead. If you only have an ONNX
|
|
182
|
+
file, convert back to PyTorch first using `onnx2torch`.
|
|
183
|
+
|
|
184
|
+
## Input and Output Types
|
|
185
|
+
|
|
186
|
+
### TensorType
|
|
187
|
+
|
|
188
|
+
```python
|
|
189
|
+
ct.TensorType(
|
|
190
|
+
name="input", # must match model input name
|
|
191
|
+
shape=(1, 3, 224, 224), # tuple of int, RangeDim, or EnumeratedShapes
|
|
192
|
+
dtype=np.float32, # np.float32, np.float16, np.int32, np.int8 (iOS26+)
|
|
193
|
+
default_value=None, # np.ndarray: makes input optional at runtime
|
|
194
|
+
)
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### ImageType
|
|
198
|
+
|
|
199
|
+
```python
|
|
200
|
+
ct.ImageType(
|
|
201
|
+
name="image",
|
|
202
|
+
shape=(1, 3, 224, 224),
|
|
203
|
+
scale=1/255.0, # per-channel scaling
|
|
204
|
+
bias=[-0.485/0.229, -0.456/0.224, -0.406/0.225], # ImageNet normalization
|
|
205
|
+
color_layout=ct.colorlayout.RGB, # RGB, BGR, GRAYSCALE, GRAYSCALE_FLOAT16
|
|
206
|
+
channel_first=True, # True for PyTorch (NCHW), False for TF (NHWC)
|
|
207
|
+
)
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### StateType (iOS 18+)
|
|
211
|
+
|
|
212
|
+
```python
|
|
213
|
+
ct.StateType(
|
|
214
|
+
wrapped_type=ct.TensorType(shape=(1, 8, 128, 64), dtype=np.float16),
|
|
215
|
+
name="kv_cache",
|
|
216
|
+
)
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## Flexible Input Shapes
|
|
220
|
+
|
|
221
|
+
### Fixed Shape
|
|
222
|
+
|
|
223
|
+
```python
|
|
224
|
+
inputs=[ct.TensorType(shape=(1, 3, 224, 224))]
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### RangeDim (Variable Dimensions)
|
|
228
|
+
|
|
229
|
+
```python
|
|
230
|
+
inputs=[ct.TensorType(shape=(
|
|
231
|
+
1, 3,
|
|
232
|
+
ct.RangeDim(lower_bound=128, upper_bound=512, default=224),
|
|
233
|
+
ct.RangeDim(lower_bound=128, upper_bound=512, default=224),
|
|
234
|
+
))]
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### EnumeratedShapes (Best Performance)
|
|
238
|
+
|
|
239
|
+
```python
|
|
240
|
+
inputs=[ct.TensorType(shape=ct.EnumeratedShapes(
|
|
241
|
+
shapes=[(1,3,224,224), (1,3,384,384), (1,3,512,512)],
|
|
242
|
+
default=(1,3,224,224),
|
|
243
|
+
))]
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**Rule:** Prefer EnumeratedShapes over RangeDim when you have a known set of
|
|
247
|
+
sizes. EnumeratedShapes allows the Neural Engine to optimize for each shape at
|
|
248
|
+
compilation time. RangeDim only optimizes for the default shape.
|
|
249
|
+
|
|
250
|
+
**Rule:** Before iOS 18, only ONE input can use EnumeratedShapes. Starting
|
|
251
|
+
iOS 18, multiple inputs can use EnumeratedShapes.
|
|
252
|
+
|
|
253
|
+
## Deployment Targets
|
|
254
|
+
|
|
255
|
+
| Target | Model Type | Key Feature Unlocks |
|
|
256
|
+
|---|---|---|
|
|
257
|
+
| `ct.target.iOS13` | neuralnetwork | Basic neural network |
|
|
258
|
+
| `ct.target.iOS15` | mlprogram | FP16 precision, typed tensors |
|
|
259
|
+
| `ct.target.iOS16` | mlprogram | Palettized weights, sparse weights |
|
|
260
|
+
| `ct.target.iOS17` | mlprogram | W8A8 activation quantization (A17 Pro+) |
|
|
261
|
+
| `ct.target.iOS18` | mlprogram | Stateful models, multifunction, per-block quantization |
|
|
262
|
+
| `ct.target.iOS26` | mlprogram | INT8 I/O dtype, state read/write |
|
|
263
|
+
|
|
264
|
+
Corresponding macOS targets: `macOS10_15`, `macOS12`, `macOS13`, `macOS14`,
|
|
265
|
+
`macOS15`, `macOS26`.
|
|
266
|
+
|
|
267
|
+
## Compute Precision
|
|
268
|
+
|
|
269
|
+
| Value | Description |
|
|
270
|
+
|---|---|
|
|
271
|
+
| `ct.precision.FLOAT16` | Default for mlprogram. Smaller, faster. |
|
|
272
|
+
| `ct.precision.FLOAT32` | Higher accuracy. Use when FP16 causes issues. |
|
|
273
|
+
|
|
274
|
+
### Mixed Precision (Selective Per-Op)
|
|
275
|
+
|
|
276
|
+
```python
|
|
277
|
+
def keep_layernorm_fp32(op):
|
|
278
|
+
if op.op_type == "layer_norm":
|
|
279
|
+
return False # keep in FP32
|
|
280
|
+
return True # convert to FP16
|
|
281
|
+
|
|
282
|
+
mlmodel = ct.convert(model,
|
|
283
|
+
compute_precision=ct.transform.FP16ComputePrecision(
|
|
284
|
+
op_selector=keep_layernorm_fp32
|
|
285
|
+
))
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
## Compute Units
|
|
289
|
+
|
|
290
|
+
| Value | Description | When to Use |
|
|
291
|
+
|---|---|---|
|
|
292
|
+
| `.all` | CPU + GPU + Neural Engine | Default, recommended |
|
|
293
|
+
| `.cpuOnly` | CPU exclusively | Debugging, FP32 accuracy |
|
|
294
|
+
| `.cpuAndGPU` | CPU and GPU, no ANE | When ANE causes issues |
|
|
295
|
+
| `.cpuAndNeuralEngine` | CPU and ANE, no GPU | Energy efficiency (macOS 13+) |
|
|
296
|
+
|
|
297
|
+
## Stateful Models (iOS 18+)
|
|
298
|
+
|
|
299
|
+
Persist intermediate values across inference runs. Critical for LLM KV-cache.
|
|
300
|
+
|
|
301
|
+
### Python Conversion
|
|
302
|
+
|
|
303
|
+
```python
|
|
304
|
+
mlmodel = ct.convert(
|
|
305
|
+
traced_model,
|
|
306
|
+
inputs=[ct.TensorType(shape=(1,), name="x")],
|
|
307
|
+
outputs=[ct.TensorType(name="y")],
|
|
308
|
+
states=[ct.StateType(
|
|
309
|
+
wrapped_type=ct.TensorType(shape=(1,)),
|
|
310
|
+
name="accumulator",
|
|
311
|
+
)],
|
|
312
|
+
minimum_deployment_target=ct.target.iOS18,
|
|
313
|
+
)
|
|
314
|
+
|
|
315
|
+
# Python prediction with state
|
|
316
|
+
state = mlmodel.make_state()
|
|
317
|
+
result = mlmodel.predict({"x": np.array([2.0])}, state=state)
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### Swift Usage
|
|
321
|
+
|
|
322
|
+
```swift
|
|
323
|
+
let model = try MLModel(contentsOf: modelURL, configuration: config)
|
|
324
|
+
let state = model.makeState()
|
|
325
|
+
let input = try MLDictionaryFeatureProvider(
|
|
326
|
+
dictionary: ["x": MLFeatureValue(double: 2.0)]
|
|
327
|
+
)
|
|
328
|
+
let output = try model.prediction(from: input, using: state)
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
Impact: Llama 3.1 with stateful KV-cache achieves 16.26 tokens/s vs 1.25
|
|
332
|
+
tokens/s without (13x improvement).
|
|
333
|
+
|
|
334
|
+
## Multifunction Models (iOS 18+)
|
|
335
|
+
|
|
336
|
+
Pack multiple model functions (e.g., LoRA adapters) into a single .mlpackage.
|
|
337
|
+
Shared weights are deduplicated.
|
|
338
|
+
|
|
339
|
+
```python
|
|
340
|
+
desc = ct.utils.MultiFunctionDescriptor()
|
|
341
|
+
desc.add_function("base.mlpackage", src_function_name="main",
|
|
342
|
+
target_function_name="base")
|
|
343
|
+
desc.add_function("adapter1.mlpackage", src_function_name="main",
|
|
344
|
+
target_function_name="style_1")
|
|
345
|
+
desc.default_function_name = "base"
|
|
346
|
+
ct.utils.save_multifunction(desc, "combined.mlpackage")
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
```swift
|
|
350
|
+
let config = MLModelConfiguration()
|
|
351
|
+
config.functionName = "style_1"
|
|
352
|
+
let model = try MLModel(contentsOf: modelURL, configuration: config)
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
## Model Utilities
|
|
356
|
+
|
|
357
|
+
```python
|
|
358
|
+
# Inspect model
|
|
359
|
+
spec = mlmodel.get_spec()
|
|
360
|
+
print(spec.description)
|
|
361
|
+
|
|
362
|
+
# Rename inputs/outputs
|
|
363
|
+
ct.utils.rename_feature(spec, "old_name", "new_name")
|
|
364
|
+
|
|
365
|
+
# Set metadata
|
|
366
|
+
mlmodel.author = "Author"
|
|
367
|
+
mlmodel.short_description = "Description"
|
|
368
|
+
mlmodel.input_description["image"] = "RGB image 224x224"
|
|
369
|
+
|
|
370
|
+
# Split large models for debugging
|
|
371
|
+
ct.models.utils.bisect_model("large.mlpackage", "./output/")
|
|
372
|
+
|
|
373
|
+
# Create pipeline from multiple models
|
|
374
|
+
pipeline = ct.models.utils.make_pipeline(model1, model2)
|
|
375
|
+
|
|
376
|
+
# Randomize weights (for testing)
|
|
377
|
+
random_model = ct.models.utils.randomize_weights(mlmodel)
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
## Graph Pass Control
|
|
381
|
+
|
|
382
|
+
```python
|
|
383
|
+
# Skip specific optimization passes
|
|
384
|
+
pipeline = ct.PassPipeline()
|
|
385
|
+
pipeline.remove_passes({"common::fuse_conv_batchnorm"})
|
|
386
|
+
mlmodel = ct.convert(model, pass_pipeline=pipeline)
|
|
387
|
+
|
|
388
|
+
# Predefined pipelines
|
|
389
|
+
ct.PassPipeline.EMPTY # no passes
|
|
390
|
+
ct.PassPipeline.CLEANUP # minimal cleanup
|
|
391
|
+
ct.PassPipeline.DEFAULT_PRUNING # optimized for pruned models
|
|
392
|
+
ct.PassPipeline.DEFAULT_PALETTIZATION # optimized for palettized models
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
## Custom Composite Operators
|
|
396
|
+
|
|
397
|
+
When PyTorch uses ops not natively supported:
|
|
398
|
+
|
|
399
|
+
```python
|
|
400
|
+
from coremltools.converters.mil.frontend.torch.torch_op_registry import register_torch_op
|
|
401
|
+
from coremltools.converters.mil.frontend.torch.ops import _get_inputs
|
|
402
|
+
from coremltools.converters.mil import Builder as mb
|
|
403
|
+
|
|
404
|
+
@register_torch_op
|
|
405
|
+
def selu(context, node):
|
|
406
|
+
x = _get_inputs(context, node, expected=1)[0]
|
|
407
|
+
x = mb.elu(x=x, alpha=1.6732632423543772)
|
|
408
|
+
x = mb.mul(x=x, y=1.0507009873554805, name=node.name)
|
|
409
|
+
context.add(x)
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
## Common Mistakes to Avoid
|
|
413
|
+
|
|
414
|
+
1. **Forgetting model.eval().** PyTorch models MUST be in eval mode before
|
|
415
|
+
tracing or exporting.
|
|
416
|
+
2. **Using RangeDim when EnumeratedShapes would work.** Known input sizes
|
|
417
|
+
should use EnumeratedShapes for better Neural Engine performance.
|
|
418
|
+
3. **Targeting neuralnetwork format for new models.** Always use mlprogram.
|
|
419
|
+
4. **Not specifying minimum_deployment_target.** Always set it explicitly.
|
|
420
|
+
5. **Using Float32 when Float16 suffices.** Float16 is the default and correct
|
|
421
|
+
for most models.
|
|
422
|
+
6. **Converting from ONNX directly.** ONNX conversion is deprecated. Convert
|
|
423
|
+
from the original framework.
|
|
424
|
+
7. **Not testing on physical devices.** Simulator does not support Metal GPU
|
|
425
|
+
or Neural Engine.
|