@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,508 +1,508 @@
|
|
|
1
|
-
# Foundation Models API Reference
|
|
2
|
-
|
|
3
|
-
Complete reference for Apple's Foundation Models framework (iOS 26+ / macOS 26+).
|
|
4
|
-
On-device language model optimized for Apple Silicon. No API keys, no network, no cost.
|
|
5
|
-
|
|
6
|
-
## Contents
|
|
7
|
-
|
|
8
|
-
- [Framework Overview](#framework-overview)
|
|
9
|
-
- [Availability Checking](#availability-checking)
|
|
10
|
-
- [Use Cases](#use-cases)
|
|
11
|
-
- [Session Management](#session-management)
|
|
12
|
-
- [Generating Responses](#generating-responses)
|
|
13
|
-
- [Structured Output with @Generable](#structured-output-with-generable)
|
|
14
|
-
- [Tool Calling](#tool-calling)
|
|
15
|
-
- [Error Handling](#error-handling)
|
|
16
|
-
- [Generation Options](#generation-options)
|
|
17
|
-
- [Safety and Guardrails](#safety-and-guardrails)
|
|
18
|
-
- [Custom Adapters](#custom-adapters)
|
|
19
|
-
- [Context Management](#context-management)
|
|
20
|
-
- [Serialized Model Access](#serialized-model-access)
|
|
21
|
-
- [Prompt Design Best Practices](#prompt-design-best-practices)
|
|
22
|
-
- [Feedback](#feedback)
|
|
23
|
-
|
|
24
|
-
## Framework Overview
|
|
25
|
-
|
|
26
|
-
- On-device language model optimized for Apple Silicon
|
|
27
|
-
- Context window: limited total token budget (input + output combined); check
|
|
28
|
-
`SystemLanguageModel.default.contextSize` for the current limit
|
|
29
|
-
- Check `SystemLanguageModel.default.supportedLanguages` for supported locales
|
|
30
|
-
- Capabilities: Summarization, entity extraction, text understanding, short
|
|
31
|
-
dialog, creative content, content tagging
|
|
32
|
-
- Limitations: Not suited for complex math, code generation, or factual accuracy
|
|
33
|
-
|
|
34
|
-
### SystemLanguageModel Properties
|
|
35
|
-
|
|
36
|
-
- `contextSize`: Returns the model's maximum context window in tokens
|
|
37
|
-
- `supportedLanguages`: Array of locale identifiers the model supports
|
|
38
|
-
- `supportsLocale(_ locale: Locale) -> Bool`: Check if a specific locale is supported before generating
|
|
39
|
-
|
|
40
|
-
## Availability Checking
|
|
41
|
-
|
|
42
|
-
Always check before using. Never crash on unavailability.
|
|
43
|
-
|
|
44
|
-
```swift
|
|
45
|
-
import FoundationModels
|
|
46
|
-
|
|
47
|
-
// Quick boolean check
|
|
48
|
-
if SystemLanguageModel.default.isAvailable {
|
|
49
|
-
// Proceed
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// Detailed availability
|
|
53
|
-
switch SystemLanguageModel.default.availability {
|
|
54
|
-
case .available:
|
|
55
|
-
// Proceed with model usage
|
|
56
|
-
case .unavailable(.appleIntelligenceNotEnabled):
|
|
57
|
-
// Guide user to Settings > Apple Intelligence
|
|
58
|
-
case .unavailable(.modelNotReady):
|
|
59
|
-
// Model downloading; show progress indicator
|
|
60
|
-
case .unavailable(.deviceNotEligible):
|
|
61
|
-
// Device cannot run Apple Intelligence
|
|
62
|
-
default:
|
|
63
|
-
// Graceful fallback
|
|
64
|
-
}
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
## Use Cases
|
|
68
|
-
|
|
69
|
-
Foundation Models supports specialized use cases:
|
|
70
|
-
|
|
71
|
-
```swift
|
|
72
|
-
// General purpose (default)
|
|
73
|
-
let model = SystemLanguageModel(useCase: .general, guardrails: .default)
|
|
74
|
-
|
|
75
|
-
// Content tagging (optimized for categorization)
|
|
76
|
-
let model = SystemLanguageModel(useCase: .contentTagging, guardrails: .default)
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
## Session Management
|
|
80
|
-
|
|
81
|
-
### Creating Sessions
|
|
82
|
-
|
|
83
|
-
```swift
|
|
84
|
-
// Basic session (uses SystemLanguageModel.default)
|
|
85
|
-
let session = LanguageModelSession()
|
|
86
|
-
|
|
87
|
-
// Session with system instructions
|
|
88
|
-
let session = LanguageModelSession {
|
|
89
|
-
"You are a helpful cooking assistant."
|
|
90
|
-
"Focus on quick, healthy recipes."
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// Session with tools
|
|
94
|
-
let session = LanguageModelSession(
|
|
95
|
-
tools: [weatherTool, recipeTool]
|
|
96
|
-
) {
|
|
97
|
-
"You are a helpful assistant with access to tools."
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// Session with specific model
|
|
101
|
-
let model = SystemLanguageModel(useCase: .general, guardrails: .default)
|
|
102
|
-
let session = LanguageModelSession(model: model, tools: []) {
|
|
103
|
-
"You are a helpful assistant."
|
|
104
|
-
}
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
### Session Rules
|
|
108
|
-
|
|
109
|
-
1. Sessions are stateful. Multi-turn conversations maintain context automatically.
|
|
110
|
-
2. One request at a time per session. Check `session.isResponding` before new
|
|
111
|
-
requests.
|
|
112
|
-
3. Prewarm with `session.prewarm()` before user interaction for faster first
|
|
113
|
-
response.
|
|
114
|
-
4. Save and restore transcripts for session continuity:
|
|
115
|
-
`LanguageModelSession(model: model, tools: [], transcript: savedTranscript)`.
|
|
116
|
-
|
|
117
|
-
### Prewarming
|
|
118
|
-
|
|
119
|
-
```swift
|
|
120
|
-
// Prewarm before user interaction
|
|
121
|
-
session.prewarm()
|
|
122
|
-
|
|
123
|
-
// Prewarm with a prompt prefix for faster specific responses
|
|
124
|
-
session.prewarm(promptPrefix: Prompt("Summarize the following text:"))
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
## Generating Responses
|
|
128
|
-
|
|
129
|
-
### Plain Text
|
|
130
|
-
|
|
131
|
-
```swift
|
|
132
|
-
// Simple text response
|
|
133
|
-
let response = try await session.respond(to: "Summarize this article: \(text)")
|
|
134
|
-
print(response.content) // String
|
|
135
|
-
|
|
136
|
-
// With generation options
|
|
137
|
-
let options = GenerationOptions(
|
|
138
|
-
sampling: .random(top: 40),
|
|
139
|
-
temperature: 0.7,
|
|
140
|
-
maximumResponseTokens: 512
|
|
141
|
-
)
|
|
142
|
-
let response = try await session.respond(to: prompt, options: options)
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
### Streaming Text
|
|
146
|
-
|
|
147
|
-
```swift
|
|
148
|
-
let stream = session.streamResponse(to: "Tell me a story")
|
|
149
|
-
for try await snapshot in stream {
|
|
150
|
-
print(snapshot.content, terminator: "")
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
// Or collect the full response
|
|
154
|
-
let response = try await stream.collect()
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
## Structured Output with @Generable
|
|
158
|
-
|
|
159
|
-
The `@Generable` macro creates compile-time JSON schemas for type-safe output.
|
|
160
|
-
|
|
161
|
-
### Basic Usage
|
|
162
|
-
|
|
163
|
-
```swift
|
|
164
|
-
@Generable
|
|
165
|
-
struct Recipe {
|
|
166
|
-
@Guide(description: "The name of the recipe")
|
|
167
|
-
var name: String
|
|
168
|
-
|
|
169
|
-
@Guide(description: "A brief description of the dish")
|
|
170
|
-
var summary: String
|
|
171
|
-
|
|
172
|
-
@Guide(description: "Cooking steps", .count(3))
|
|
173
|
-
var steps: [String]
|
|
174
|
-
|
|
175
|
-
@Guide(description: "Prep time in minutes", .range(1...120))
|
|
176
|
-
var prepTime: Int
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
let response = try await session.respond(
|
|
180
|
-
to: "Suggest a quick pasta recipe",
|
|
181
|
-
generating: Recipe.self
|
|
182
|
-
)
|
|
183
|
-
let recipe = response.content
|
|
184
|
-
print(recipe.name)
|
|
185
|
-
print(recipe.steps)
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
### Supported Types for @Generable Properties
|
|
189
|
-
|
|
190
|
-
- `String`
|
|
191
|
-
- `Int`, `Double`, `Float`
|
|
192
|
-
- `Bool`
|
|
193
|
-
- `[Element]` where Element is Generable or a supported scalar
|
|
194
|
-
- `Optional<T>` where T is Generable or a supported scalar
|
|
195
|
-
- Other `@Generable` structs (nested)
|
|
196
|
-
- Enums conforming to `@Generable`
|
|
197
|
-
|
|
198
|
-
### @Guide Constraints
|
|
199
|
-
|
|
200
|
-
```swift
|
|
201
|
-
@Generable
|
|
202
|
-
struct ProductReview {
|
|
203
|
-
@Guide(description: "Product name")
|
|
204
|
-
var product: String
|
|
205
|
-
|
|
206
|
-
@Guide(description: "Rating", .range(1...5))
|
|
207
|
-
var rating: Int
|
|
208
|
-
|
|
209
|
-
@Guide(description: "Sentiment", .anyOf(["positive", "neutral", "negative"]))
|
|
210
|
-
var sentiment: String
|
|
211
|
-
|
|
212
|
-
@Guide(description: "Key themes", .count(3))
|
|
213
|
-
var themes: [String]
|
|
214
|
-
|
|
215
|
-
@Guide(description: "Summary in one sentence", .pattern(/^[A-Z].*\.$/))
|
|
216
|
-
var summary: String
|
|
217
|
-
|
|
218
|
-
@Guide(description: "Always English", .constant("en"))
|
|
219
|
-
var language: String
|
|
220
|
-
}
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
Complete constraint list:
|
|
224
|
-
|
|
225
|
-
| Constraint | Type | Purpose |
|
|
226
|
-
|---|---|---|
|
|
227
|
-
| `description:` | All | Natural language hint for generation |
|
|
228
|
-
| `.anyOf([values])` | String | Restrict to enumerated values |
|
|
229
|
-
| `.count(n)` | Array | Fixed array length |
|
|
230
|
-
| `.minimumCount(n)` | Array | Minimum array length |
|
|
231
|
-
| `.maximumCount(n)` | Array | Maximum array length |
|
|
232
|
-
| `.range(min...max)` | Numeric | Closed numeric range |
|
|
233
|
-
| `.minimum(n)` | Numeric | Lower bound |
|
|
234
|
-
| `.maximum(n)` | Numeric | Upper bound |
|
|
235
|
-
| `.constant(value)` | String | Always returns this value |
|
|
236
|
-
| `.pattern(regex)` | String | Regex format enforcement |
|
|
237
|
-
| `.element(guide)` | Array | Guide applied to each element |
|
|
238
|
-
|
|
239
|
-
### Property Ordering
|
|
240
|
-
|
|
241
|
-
Properties are generated in declaration order. Place foundational data before
|
|
242
|
-
dependent data:
|
|
243
|
-
|
|
244
|
-
```swift
|
|
245
|
-
@Generable
|
|
246
|
-
struct Summary {
|
|
247
|
-
var title: String // Generated first
|
|
248
|
-
var keyPoints: [String] // Generated with title context
|
|
249
|
-
var conclusion: String // Generated with full context
|
|
250
|
-
}
|
|
251
|
-
```
|
|
252
|
-
|
|
253
|
-
### Streaming Structured Output
|
|
254
|
-
|
|
255
|
-
```swift
|
|
256
|
-
let stream = session.streamResponse(
|
|
257
|
-
to: "Suggest a recipe",
|
|
258
|
-
generating: Recipe.self
|
|
259
|
-
)
|
|
260
|
-
for try await snapshot in stream {
|
|
261
|
-
// snapshot.content is Recipe.PartiallyGenerated (all properties optional)
|
|
262
|
-
if let name = snapshot.content.name { updateNameLabel(name) }
|
|
263
|
-
if let steps = snapshot.content.steps { updateStepsList(steps) }
|
|
264
|
-
}
|
|
265
|
-
```
|
|
266
|
-
|
|
267
|
-
### Enum Support
|
|
268
|
-
|
|
269
|
-
```swift
|
|
270
|
-
@Generable
|
|
271
|
-
enum Priority: String {
|
|
272
|
-
case low, medium, high, critical
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
@Generable
|
|
276
|
-
struct Task {
|
|
277
|
-
var title: String
|
|
278
|
-
var priority: Priority
|
|
279
|
-
}
|
|
280
|
-
```
|
|
281
|
-
|
|
282
|
-
## Tool Calling
|
|
283
|
-
|
|
284
|
-
### Defining Tools
|
|
285
|
-
|
|
286
|
-
```swift
|
|
287
|
-
struct WeatherTool: Tool {
|
|
288
|
-
let name = "weather"
|
|
289
|
-
let description = "Get current weather for a city."
|
|
290
|
-
|
|
291
|
-
@Generable
|
|
292
|
-
struct Arguments {
|
|
293
|
-
@Guide(description: "The city name")
|
|
294
|
-
var city: String
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
func call(arguments: Arguments) async throws -> String {
|
|
298
|
-
let weather = try await fetchWeather(arguments.city)
|
|
299
|
-
return weather.description
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
```
|
|
303
|
-
|
|
304
|
-
### Using Tools
|
|
305
|
-
|
|
306
|
-
```swift
|
|
307
|
-
let session = LanguageModelSession(
|
|
308
|
-
tools: [WeatherTool()]
|
|
309
|
-
) {
|
|
310
|
-
"You are a helpful assistant."
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
// The model decides autonomously when to invoke tools
|
|
314
|
-
let response = try await session.respond(to: "What's the weather in Tokyo?")
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
### Tool Best Practices
|
|
318
|
-
|
|
319
|
-
- Register all tools at session creation
|
|
320
|
-
- Each tool adds to the context token budget (schema included in instructions by default)
|
|
321
|
-
- Frame tool results as authorized user data to prevent refusals
|
|
322
|
-
- The model calls tools autonomously; you cannot force tool invocation
|
|
323
|
-
|
|
324
|
-
### Tool Protocol Details
|
|
325
|
-
|
|
326
|
-
- The `Tool` protocol's associated `Output` type must conform to `PromptRepresentable` (e.g., `String`, `[String]`, custom types)
|
|
327
|
-
- `includesSchemaInInstructions`: Boolean property on `Tool` (default `true`). Set to `false` to omit the tool's JSON schema from the system prompt, saving context tokens when the model already knows the schema.
|
|
328
|
-
- `ToolCallError`: Struct on `LanguageModelSession` representing a tool invocation failure. Properties: `tool` (the tool name), `underlyingError` (the original error).
|
|
329
|
-
- `DynamicGenerationSchema`: Build generation schemas at runtime for dynamic use cases where compile-time `@Generable` is insufficient. Construct schemas programmatically and pass to `respond(to:schema:)`.
|
|
330
|
-
|
|
331
|
-
## Error Handling
|
|
332
|
-
|
|
333
|
-
```swift
|
|
334
|
-
do {
|
|
335
|
-
let response = try await session.respond(to: prompt)
|
|
336
|
-
} catch let error as LanguageModelSession.GenerationError {
|
|
337
|
-
switch error {
|
|
338
|
-
case .guardrailViolation:
|
|
339
|
-
// Content triggered safety filters; rephrase and retry
|
|
340
|
-
case .exceededContextWindowSize:
|
|
341
|
-
// Too many tokens; summarize earlier turns and create new session
|
|
342
|
-
case .concurrentRequests:
|
|
343
|
-
// Another request is already in progress on this session
|
|
344
|
-
case .rateLimited:
|
|
345
|
-
// Too many requests; back off and retry
|
|
346
|
-
case .unsupportedLanguageOrLocale:
|
|
347
|
-
// Current locale not supported by the model
|
|
348
|
-
case .unsupportedGuide:
|
|
349
|
-
// A @Guide constraint is not supported
|
|
350
|
-
case .assetsUnavailable:
|
|
351
|
-
// Model assets not available on device
|
|
352
|
-
case .decodingFailure:
|
|
353
|
-
// Failed to decode structured output
|
|
354
|
-
case .refusal(let refusal, _):
|
|
355
|
-
// Model refused the request
|
|
356
|
-
let explanation = try await refusal.explanation.content
|
|
357
|
-
print("Refused: \(explanation)")
|
|
358
|
-
default: break
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
```
|
|
362
|
-
|
|
363
|
-
## Generation Options
|
|
364
|
-
|
|
365
|
-
```swift
|
|
366
|
-
let options = GenerationOptions(
|
|
367
|
-
sampling: .greedy, // Deterministic output
|
|
368
|
-
temperature: nil, // Use default
|
|
369
|
-
maximumResponseTokens: 256 // Limit response length
|
|
370
|
-
)
|
|
371
|
-
|
|
372
|
-
// Random sampling with top-k
|
|
373
|
-
let options = GenerationOptions(
|
|
374
|
-
sampling: .random(top: 40),
|
|
375
|
-
temperature: 0.7
|
|
376
|
-
)
|
|
377
|
-
|
|
378
|
-
// Random sampling with probability threshold
|
|
379
|
-
let options = GenerationOptions(
|
|
380
|
-
sampling: .random(probabilityThreshold: 0.9)
|
|
381
|
-
)
|
|
382
|
-
```
|
|
383
|
-
|
|
384
|
-
Sampling modes accept an optional `seed` parameter for reproducible output:
|
|
385
|
-
`.random(top: 40, seed: 42)`, `.random(probabilityThreshold: 0.9, seed: 42)`.
|
|
386
|
-
|
|
387
|
-
## Safety and Guardrails
|
|
388
|
-
|
|
389
|
-
### Guardrail Types
|
|
390
|
-
|
|
391
|
-
```swift
|
|
392
|
-
// Default guardrails (recommended)
|
|
393
|
-
let model = SystemLanguageModel(useCase: .general, guardrails: .default)
|
|
394
|
-
|
|
395
|
-
// Permissive content transformations (for text rewriting tasks)
|
|
396
|
-
let model = SystemLanguageModel(
|
|
397
|
-
useCase: .general,
|
|
398
|
-
guardrails: .permissiveContentTransformations
|
|
399
|
-
)
|
|
400
|
-
```
|
|
401
|
-
|
|
402
|
-
### Safety Rules
|
|
403
|
-
|
|
404
|
-
- Guardrails are always enforced and cannot be disabled
|
|
405
|
-
- Instructions take precedence over user prompts
|
|
406
|
-
- Never include untrusted user content in instructions
|
|
407
|
-
- Provide curated selections over free-form input when possible
|
|
408
|
-
- Guardrails can produce false positives; handle gracefully
|
|
409
|
-
- Frame tool results as authorized user data
|
|
410
|
-
|
|
411
|
-
## Custom Adapters
|
|
412
|
-
|
|
413
|
-
Load fine-tuned LoRA adapters for specialized model behavior:
|
|
414
|
-
|
|
415
|
-
```swift
|
|
416
|
-
// Requires com.apple.developer.foundation-model-adapter entitlement
|
|
417
|
-
let adapter = try SystemLanguageModel.Adapter(name: "my-adapter")
|
|
418
|
-
try await adapter.compile()
|
|
419
|
-
|
|
420
|
-
let model = SystemLanguageModel(adapter: adapter, guardrails: .default)
|
|
421
|
-
let session = LanguageModelSession(model: model)
|
|
422
|
-
let response = try await session.respond(to: "Generate styled text")
|
|
423
|
-
```
|
|
424
|
-
|
|
425
|
-
### Adapter Management
|
|
426
|
-
|
|
427
|
-
```swift
|
|
428
|
-
// Check compatible adapters
|
|
429
|
-
let ids = SystemLanguageModel.Adapter.compatibleAdapterIdentifiers(name: "my-adapter")
|
|
430
|
-
|
|
431
|
-
// Remove obsolete adapters
|
|
432
|
-
try SystemLanguageModel.Adapter.removeObsoleteAdapters()
|
|
433
|
-
```
|
|
434
|
-
|
|
435
|
-
## Context Management
|
|
436
|
-
|
|
437
|
-
When conversations grow long:
|
|
438
|
-
|
|
439
|
-
1. Monitor token usage against `SystemLanguageModel.default.contextSize`
|
|
440
|
-
2. Use `SystemLanguageModel.default.tokenCount(for:)` to estimate usage
|
|
441
|
-
3. Summarize earlier turns into new session instructions
|
|
442
|
-
4. Create fresh sessions with summary context rather than overflowing
|
|
443
|
-
|
|
444
|
-
```swift
|
|
445
|
-
if transcript.estimatedTokenCount > 3000 {
|
|
446
|
-
let summary = try await summarizeSession(session)
|
|
447
|
-
session = LanguageModelSession {
|
|
448
|
-
"Previous conversation summary: \(summary)"
|
|
449
|
-
"Continue helping the user."
|
|
450
|
-
}
|
|
451
|
-
}
|
|
452
|
-
```
|
|
453
|
-
|
|
454
|
-
## Serialized Model Access
|
|
455
|
-
|
|
456
|
-
When multiple parts of an app need the model:
|
|
457
|
-
|
|
458
|
-
```swift
|
|
459
|
-
actor FoundationModelCoordinator {
|
|
460
|
-
private var session: LanguageModelSession?
|
|
461
|
-
|
|
462
|
-
func respond(to prompt: String) async throws -> String {
|
|
463
|
-
if session == nil {
|
|
464
|
-
session = LanguageModelSession()
|
|
465
|
-
}
|
|
466
|
-
guard let activeSession = session else {
|
|
467
|
-
throw FoundationModelError.sessionUnavailable
|
|
468
|
-
}
|
|
469
|
-
let response = try await activeSession.respond(to: prompt)
|
|
470
|
-
return response.content
|
|
471
|
-
}
|
|
472
|
-
}
|
|
473
|
-
```
|
|
474
|
-
|
|
475
|
-
Serialize all Foundation Model access through a single coordinator to prevent
|
|
476
|
-
Neural Engine contention.
|
|
477
|
-
|
|
478
|
-
## Prompt Design Best Practices
|
|
479
|
-
|
|
480
|
-
1. **Be concise.** The context window covers both input and output tokens.
|
|
481
|
-
Check `SystemLanguageModel.default.contextSize` for the current limit.
|
|
482
|
-
2. **Use bracketed placeholders** in instructions: `[descriptive example]`.
|
|
483
|
-
3. **Use "DO NOT" in all caps** for behavioral prohibitions.
|
|
484
|
-
4. **Provide up to 5 few-shot examples** for consistent output.
|
|
485
|
-
5. **Use length qualifiers:** "in a few words", "in three sentences".
|
|
486
|
-
6. **Estimate token usage** with `SystemLanguageModel.default.tokenCount(for:)`
|
|
487
|
-
to avoid exceeding the context window.
|
|
488
|
-
|
|
489
|
-
## Feedback
|
|
490
|
-
|
|
491
|
-
Log feedback for model improvement:
|
|
492
|
-
|
|
493
|
-
```swift
|
|
494
|
-
let data = session.logFeedbackAttachment(
|
|
495
|
-
sentiment: .negative,
|
|
496
|
-
issues: [
|
|
497
|
-
LanguageModelFeedback.Issue(
|
|
498
|
-
category: .didNotFollowInstructions,
|
|
499
|
-
explanation: "Ignored the word count constraint"
|
|
500
|
-
)
|
|
501
|
-
],
|
|
502
|
-
desiredOutput: nil
|
|
503
|
-
)
|
|
504
|
-
```
|
|
505
|
-
|
|
506
|
-
Issue categories: `.didNotFollowInstructions`, `.incorrect`,
|
|
507
|
-
`.stereotypeOrBias`, `.suggestiveOrSexual`, `.tooVerbose`,
|
|
508
|
-
`.triggeredGuardrailUnexpectedly`, `.unhelpful`, `.vulgarOrOffensive`.
|
|
1
|
+
# Foundation Models API Reference
|
|
2
|
+
|
|
3
|
+
Complete reference for Apple's Foundation Models framework (iOS 26+ / macOS 26+).
|
|
4
|
+
On-device language model optimized for Apple Silicon. No API keys, no network, no cost.
|
|
5
|
+
|
|
6
|
+
## Contents
|
|
7
|
+
|
|
8
|
+
- [Framework Overview](#framework-overview)
|
|
9
|
+
- [Availability Checking](#availability-checking)
|
|
10
|
+
- [Use Cases](#use-cases)
|
|
11
|
+
- [Session Management](#session-management)
|
|
12
|
+
- [Generating Responses](#generating-responses)
|
|
13
|
+
- [Structured Output with @Generable](#structured-output-with-generable)
|
|
14
|
+
- [Tool Calling](#tool-calling)
|
|
15
|
+
- [Error Handling](#error-handling)
|
|
16
|
+
- [Generation Options](#generation-options)
|
|
17
|
+
- [Safety and Guardrails](#safety-and-guardrails)
|
|
18
|
+
- [Custom Adapters](#custom-adapters)
|
|
19
|
+
- [Context Management](#context-management)
|
|
20
|
+
- [Serialized Model Access](#serialized-model-access)
|
|
21
|
+
- [Prompt Design Best Practices](#prompt-design-best-practices)
|
|
22
|
+
- [Feedback](#feedback)
|
|
23
|
+
|
|
24
|
+
## Framework Overview
|
|
25
|
+
|
|
26
|
+
- On-device language model optimized for Apple Silicon
|
|
27
|
+
- Context window: limited total token budget (input + output combined); check
|
|
28
|
+
`SystemLanguageModel.default.contextSize` for the current limit
|
|
29
|
+
- Check `SystemLanguageModel.default.supportedLanguages` for supported locales
|
|
30
|
+
- Capabilities: Summarization, entity extraction, text understanding, short
|
|
31
|
+
dialog, creative content, content tagging
|
|
32
|
+
- Limitations: Not suited for complex math, code generation, or factual accuracy
|
|
33
|
+
|
|
34
|
+
### SystemLanguageModel Properties
|
|
35
|
+
|
|
36
|
+
- `contextSize`: Returns the model's maximum context window in tokens
|
|
37
|
+
- `supportedLanguages`: Array of locale identifiers the model supports
|
|
38
|
+
- `supportsLocale(_ locale: Locale) -> Bool`: Check if a specific locale is supported before generating
|
|
39
|
+
|
|
40
|
+
## Availability Checking
|
|
41
|
+
|
|
42
|
+
Always check before using. Never crash on unavailability.
|
|
43
|
+
|
|
44
|
+
```swift
|
|
45
|
+
import FoundationModels
|
|
46
|
+
|
|
47
|
+
// Quick boolean check
|
|
48
|
+
if SystemLanguageModel.default.isAvailable {
|
|
49
|
+
// Proceed
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Detailed availability
|
|
53
|
+
switch SystemLanguageModel.default.availability {
|
|
54
|
+
case .available:
|
|
55
|
+
// Proceed with model usage
|
|
56
|
+
case .unavailable(.appleIntelligenceNotEnabled):
|
|
57
|
+
// Guide user to Settings > Apple Intelligence
|
|
58
|
+
case .unavailable(.modelNotReady):
|
|
59
|
+
// Model downloading; show progress indicator
|
|
60
|
+
case .unavailable(.deviceNotEligible):
|
|
61
|
+
// Device cannot run Apple Intelligence
|
|
62
|
+
default:
|
|
63
|
+
// Graceful fallback
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Use Cases
|
|
68
|
+
|
|
69
|
+
Foundation Models supports specialized use cases:
|
|
70
|
+
|
|
71
|
+
```swift
|
|
72
|
+
// General purpose (default)
|
|
73
|
+
let model = SystemLanguageModel(useCase: .general, guardrails: .default)
|
|
74
|
+
|
|
75
|
+
// Content tagging (optimized for categorization)
|
|
76
|
+
let model = SystemLanguageModel(useCase: .contentTagging, guardrails: .default)
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Session Management
|
|
80
|
+
|
|
81
|
+
### Creating Sessions
|
|
82
|
+
|
|
83
|
+
```swift
|
|
84
|
+
// Basic session (uses SystemLanguageModel.default)
|
|
85
|
+
let session = LanguageModelSession()
|
|
86
|
+
|
|
87
|
+
// Session with system instructions
|
|
88
|
+
let session = LanguageModelSession {
|
|
89
|
+
"You are a helpful cooking assistant."
|
|
90
|
+
"Focus on quick, healthy recipes."
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Session with tools
|
|
94
|
+
let session = LanguageModelSession(
|
|
95
|
+
tools: [weatherTool, recipeTool]
|
|
96
|
+
) {
|
|
97
|
+
"You are a helpful assistant with access to tools."
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Session with specific model
|
|
101
|
+
let model = SystemLanguageModel(useCase: .general, guardrails: .default)
|
|
102
|
+
let session = LanguageModelSession(model: model, tools: []) {
|
|
103
|
+
"You are a helpful assistant."
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Session Rules
|
|
108
|
+
|
|
109
|
+
1. Sessions are stateful. Multi-turn conversations maintain context automatically.
|
|
110
|
+
2. One request at a time per session. Check `session.isResponding` before new
|
|
111
|
+
requests.
|
|
112
|
+
3. Prewarm with `session.prewarm()` before user interaction for faster first
|
|
113
|
+
response.
|
|
114
|
+
4. Save and restore transcripts for session continuity:
|
|
115
|
+
`LanguageModelSession(model: model, tools: [], transcript: savedTranscript)`.
|
|
116
|
+
|
|
117
|
+
### Prewarming
|
|
118
|
+
|
|
119
|
+
```swift
|
|
120
|
+
// Prewarm before user interaction
|
|
121
|
+
session.prewarm()
|
|
122
|
+
|
|
123
|
+
// Prewarm with a prompt prefix for faster specific responses
|
|
124
|
+
session.prewarm(promptPrefix: Prompt("Summarize the following text:"))
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Generating Responses
|
|
128
|
+
|
|
129
|
+
### Plain Text
|
|
130
|
+
|
|
131
|
+
```swift
|
|
132
|
+
// Simple text response
|
|
133
|
+
let response = try await session.respond(to: "Summarize this article: \(text)")
|
|
134
|
+
print(response.content) // String
|
|
135
|
+
|
|
136
|
+
// With generation options
|
|
137
|
+
let options = GenerationOptions(
|
|
138
|
+
sampling: .random(top: 40),
|
|
139
|
+
temperature: 0.7,
|
|
140
|
+
maximumResponseTokens: 512
|
|
141
|
+
)
|
|
142
|
+
let response = try await session.respond(to: prompt, options: options)
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Streaming Text
|
|
146
|
+
|
|
147
|
+
```swift
|
|
148
|
+
let stream = session.streamResponse(to: "Tell me a story")
|
|
149
|
+
for try await snapshot in stream {
|
|
150
|
+
print(snapshot.content, terminator: "")
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// Or collect the full response
|
|
154
|
+
let response = try await stream.collect()
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## Structured Output with @Generable
|
|
158
|
+
|
|
159
|
+
The `@Generable` macro creates compile-time JSON schemas for type-safe output.
|
|
160
|
+
|
|
161
|
+
### Basic Usage
|
|
162
|
+
|
|
163
|
+
```swift
|
|
164
|
+
@Generable
|
|
165
|
+
struct Recipe {
|
|
166
|
+
@Guide(description: "The name of the recipe")
|
|
167
|
+
var name: String
|
|
168
|
+
|
|
169
|
+
@Guide(description: "A brief description of the dish")
|
|
170
|
+
var summary: String
|
|
171
|
+
|
|
172
|
+
@Guide(description: "Cooking steps", .count(3))
|
|
173
|
+
var steps: [String]
|
|
174
|
+
|
|
175
|
+
@Guide(description: "Prep time in minutes", .range(1...120))
|
|
176
|
+
var prepTime: Int
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
let response = try await session.respond(
|
|
180
|
+
to: "Suggest a quick pasta recipe",
|
|
181
|
+
generating: Recipe.self
|
|
182
|
+
)
|
|
183
|
+
let recipe = response.content
|
|
184
|
+
print(recipe.name)
|
|
185
|
+
print(recipe.steps)
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Supported Types for @Generable Properties
|
|
189
|
+
|
|
190
|
+
- `String`
|
|
191
|
+
- `Int`, `Double`, `Float`
|
|
192
|
+
- `Bool`
|
|
193
|
+
- `[Element]` where Element is Generable or a supported scalar
|
|
194
|
+
- `Optional<T>` where T is Generable or a supported scalar
|
|
195
|
+
- Other `@Generable` structs (nested)
|
|
196
|
+
- Enums conforming to `@Generable`
|
|
197
|
+
|
|
198
|
+
### @Guide Constraints
|
|
199
|
+
|
|
200
|
+
```swift
|
|
201
|
+
@Generable
|
|
202
|
+
struct ProductReview {
|
|
203
|
+
@Guide(description: "Product name")
|
|
204
|
+
var product: String
|
|
205
|
+
|
|
206
|
+
@Guide(description: "Rating", .range(1...5))
|
|
207
|
+
var rating: Int
|
|
208
|
+
|
|
209
|
+
@Guide(description: "Sentiment", .anyOf(["positive", "neutral", "negative"]))
|
|
210
|
+
var sentiment: String
|
|
211
|
+
|
|
212
|
+
@Guide(description: "Key themes", .count(3))
|
|
213
|
+
var themes: [String]
|
|
214
|
+
|
|
215
|
+
@Guide(description: "Summary in one sentence", .pattern(/^[A-Z].*\.$/))
|
|
216
|
+
var summary: String
|
|
217
|
+
|
|
218
|
+
@Guide(description: "Always English", .constant("en"))
|
|
219
|
+
var language: String
|
|
220
|
+
}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
Complete constraint list:
|
|
224
|
+
|
|
225
|
+
| Constraint | Type | Purpose |
|
|
226
|
+
|---|---|---|
|
|
227
|
+
| `description:` | All | Natural language hint for generation |
|
|
228
|
+
| `.anyOf([values])` | String | Restrict to enumerated values |
|
|
229
|
+
| `.count(n)` | Array | Fixed array length |
|
|
230
|
+
| `.minimumCount(n)` | Array | Minimum array length |
|
|
231
|
+
| `.maximumCount(n)` | Array | Maximum array length |
|
|
232
|
+
| `.range(min...max)` | Numeric | Closed numeric range |
|
|
233
|
+
| `.minimum(n)` | Numeric | Lower bound |
|
|
234
|
+
| `.maximum(n)` | Numeric | Upper bound |
|
|
235
|
+
| `.constant(value)` | String | Always returns this value |
|
|
236
|
+
| `.pattern(regex)` | String | Regex format enforcement |
|
|
237
|
+
| `.element(guide)` | Array | Guide applied to each element |
|
|
238
|
+
|
|
239
|
+
### Property Ordering
|
|
240
|
+
|
|
241
|
+
Properties are generated in declaration order. Place foundational data before
|
|
242
|
+
dependent data:
|
|
243
|
+
|
|
244
|
+
```swift
|
|
245
|
+
@Generable
|
|
246
|
+
struct Summary {
|
|
247
|
+
var title: String // Generated first
|
|
248
|
+
var keyPoints: [String] // Generated with title context
|
|
249
|
+
var conclusion: String // Generated with full context
|
|
250
|
+
}
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### Streaming Structured Output
|
|
254
|
+
|
|
255
|
+
```swift
|
|
256
|
+
let stream = session.streamResponse(
|
|
257
|
+
to: "Suggest a recipe",
|
|
258
|
+
generating: Recipe.self
|
|
259
|
+
)
|
|
260
|
+
for try await snapshot in stream {
|
|
261
|
+
// snapshot.content is Recipe.PartiallyGenerated (all properties optional)
|
|
262
|
+
if let name = snapshot.content.name { updateNameLabel(name) }
|
|
263
|
+
if let steps = snapshot.content.steps { updateStepsList(steps) }
|
|
264
|
+
}
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### Enum Support
|
|
268
|
+
|
|
269
|
+
```swift
|
|
270
|
+
@Generable
|
|
271
|
+
enum Priority: String {
|
|
272
|
+
case low, medium, high, critical
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
@Generable
|
|
276
|
+
struct Task {
|
|
277
|
+
var title: String
|
|
278
|
+
var priority: Priority
|
|
279
|
+
}
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
## Tool Calling
|
|
283
|
+
|
|
284
|
+
### Defining Tools
|
|
285
|
+
|
|
286
|
+
```swift
|
|
287
|
+
struct WeatherTool: Tool {
|
|
288
|
+
let name = "weather"
|
|
289
|
+
let description = "Get current weather for a city."
|
|
290
|
+
|
|
291
|
+
@Generable
|
|
292
|
+
struct Arguments {
|
|
293
|
+
@Guide(description: "The city name")
|
|
294
|
+
var city: String
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
func call(arguments: Arguments) async throws -> String {
|
|
298
|
+
let weather = try await fetchWeather(arguments.city)
|
|
299
|
+
return weather.description
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
### Using Tools
|
|
305
|
+
|
|
306
|
+
```swift
|
|
307
|
+
let session = LanguageModelSession(
|
|
308
|
+
tools: [WeatherTool()]
|
|
309
|
+
) {
|
|
310
|
+
"You are a helpful assistant."
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
// The model decides autonomously when to invoke tools
|
|
314
|
+
let response = try await session.respond(to: "What's the weather in Tokyo?")
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
### Tool Best Practices
|
|
318
|
+
|
|
319
|
+
- Register all tools at session creation
|
|
320
|
+
- Each tool adds to the context token budget (schema included in instructions by default)
|
|
321
|
+
- Frame tool results as authorized user data to prevent refusals
|
|
322
|
+
- The model calls tools autonomously; you cannot force tool invocation
|
|
323
|
+
|
|
324
|
+
### Tool Protocol Details
|
|
325
|
+
|
|
326
|
+
- The `Tool` protocol's associated `Output` type must conform to `PromptRepresentable` (e.g., `String`, `[String]`, custom types)
|
|
327
|
+
- `includesSchemaInInstructions`: Boolean property on `Tool` (default `true`). Set to `false` to omit the tool's JSON schema from the system prompt, saving context tokens when the model already knows the schema.
|
|
328
|
+
- `ToolCallError`: Struct on `LanguageModelSession` representing a tool invocation failure. Properties: `tool` (the tool name), `underlyingError` (the original error).
|
|
329
|
+
- `DynamicGenerationSchema`: Build generation schemas at runtime for dynamic use cases where compile-time `@Generable` is insufficient. Construct schemas programmatically and pass to `respond(to:schema:)`.
|
|
330
|
+
|
|
331
|
+
## Error Handling
|
|
332
|
+
|
|
333
|
+
```swift
|
|
334
|
+
do {
|
|
335
|
+
let response = try await session.respond(to: prompt)
|
|
336
|
+
} catch let error as LanguageModelSession.GenerationError {
|
|
337
|
+
switch error {
|
|
338
|
+
case .guardrailViolation:
|
|
339
|
+
// Content triggered safety filters; rephrase and retry
|
|
340
|
+
case .exceededContextWindowSize:
|
|
341
|
+
// Too many tokens; summarize earlier turns and create new session
|
|
342
|
+
case .concurrentRequests:
|
|
343
|
+
// Another request is already in progress on this session
|
|
344
|
+
case .rateLimited:
|
|
345
|
+
// Too many requests; back off and retry
|
|
346
|
+
case .unsupportedLanguageOrLocale:
|
|
347
|
+
// Current locale not supported by the model
|
|
348
|
+
case .unsupportedGuide:
|
|
349
|
+
// A @Guide constraint is not supported
|
|
350
|
+
case .assetsUnavailable:
|
|
351
|
+
// Model assets not available on device
|
|
352
|
+
case .decodingFailure:
|
|
353
|
+
// Failed to decode structured output
|
|
354
|
+
case .refusal(let refusal, _):
|
|
355
|
+
// Model refused the request
|
|
356
|
+
let explanation = try await refusal.explanation.content
|
|
357
|
+
print("Refused: \(explanation)")
|
|
358
|
+
default: break
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
## Generation Options
|
|
364
|
+
|
|
365
|
+
```swift
|
|
366
|
+
let options = GenerationOptions(
|
|
367
|
+
sampling: .greedy, // Deterministic output
|
|
368
|
+
temperature: nil, // Use default
|
|
369
|
+
maximumResponseTokens: 256 // Limit response length
|
|
370
|
+
)
|
|
371
|
+
|
|
372
|
+
// Random sampling with top-k
|
|
373
|
+
let options = GenerationOptions(
|
|
374
|
+
sampling: .random(top: 40),
|
|
375
|
+
temperature: 0.7
|
|
376
|
+
)
|
|
377
|
+
|
|
378
|
+
// Random sampling with probability threshold
|
|
379
|
+
let options = GenerationOptions(
|
|
380
|
+
sampling: .random(probabilityThreshold: 0.9)
|
|
381
|
+
)
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
Sampling modes accept an optional `seed` parameter for reproducible output:
|
|
385
|
+
`.random(top: 40, seed: 42)`, `.random(probabilityThreshold: 0.9, seed: 42)`.
|
|
386
|
+
|
|
387
|
+
## Safety and Guardrails
|
|
388
|
+
|
|
389
|
+
### Guardrail Types
|
|
390
|
+
|
|
391
|
+
```swift
|
|
392
|
+
// Default guardrails (recommended)
|
|
393
|
+
let model = SystemLanguageModel(useCase: .general, guardrails: .default)
|
|
394
|
+
|
|
395
|
+
// Permissive content transformations (for text rewriting tasks)
|
|
396
|
+
let model = SystemLanguageModel(
|
|
397
|
+
useCase: .general,
|
|
398
|
+
guardrails: .permissiveContentTransformations
|
|
399
|
+
)
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
### Safety Rules
|
|
403
|
+
|
|
404
|
+
- Guardrails are always enforced and cannot be disabled
|
|
405
|
+
- Instructions take precedence over user prompts
|
|
406
|
+
- Never include untrusted user content in instructions
|
|
407
|
+
- Provide curated selections over free-form input when possible
|
|
408
|
+
- Guardrails can produce false positives; handle gracefully
|
|
409
|
+
- Frame tool results as authorized user data
|
|
410
|
+
|
|
411
|
+
## Custom Adapters
|
|
412
|
+
|
|
413
|
+
Load fine-tuned LoRA adapters for specialized model behavior:
|
|
414
|
+
|
|
415
|
+
```swift
|
|
416
|
+
// Requires com.apple.developer.foundation-model-adapter entitlement
|
|
417
|
+
let adapter = try SystemLanguageModel.Adapter(name: "my-adapter")
|
|
418
|
+
try await adapter.compile()
|
|
419
|
+
|
|
420
|
+
let model = SystemLanguageModel(adapter: adapter, guardrails: .default)
|
|
421
|
+
let session = LanguageModelSession(model: model)
|
|
422
|
+
let response = try await session.respond(to: "Generate styled text")
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
### Adapter Management
|
|
426
|
+
|
|
427
|
+
```swift
|
|
428
|
+
// Check compatible adapters
|
|
429
|
+
let ids = SystemLanguageModel.Adapter.compatibleAdapterIdentifiers(name: "my-adapter")
|
|
430
|
+
|
|
431
|
+
// Remove obsolete adapters
|
|
432
|
+
try SystemLanguageModel.Adapter.removeObsoleteAdapters()
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
## Context Management
|
|
436
|
+
|
|
437
|
+
When conversations grow long:
|
|
438
|
+
|
|
439
|
+
1. Monitor token usage against `SystemLanguageModel.default.contextSize`
|
|
440
|
+
2. Use `SystemLanguageModel.default.tokenCount(for:)` to estimate usage
|
|
441
|
+
3. Summarize earlier turns into new session instructions
|
|
442
|
+
4. Create fresh sessions with summary context rather than overflowing
|
|
443
|
+
|
|
444
|
+
```swift
|
|
445
|
+
if transcript.estimatedTokenCount > 3000 {
|
|
446
|
+
let summary = try await summarizeSession(session)
|
|
447
|
+
session = LanguageModelSession {
|
|
448
|
+
"Previous conversation summary: \(summary)"
|
|
449
|
+
"Continue helping the user."
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
## Serialized Model Access
|
|
455
|
+
|
|
456
|
+
When multiple parts of an app need the model:
|
|
457
|
+
|
|
458
|
+
```swift
|
|
459
|
+
actor FoundationModelCoordinator {
|
|
460
|
+
private var session: LanguageModelSession?
|
|
461
|
+
|
|
462
|
+
func respond(to prompt: String) async throws -> String {
|
|
463
|
+
if session == nil {
|
|
464
|
+
session = LanguageModelSession()
|
|
465
|
+
}
|
|
466
|
+
guard let activeSession = session else {
|
|
467
|
+
throw FoundationModelError.sessionUnavailable
|
|
468
|
+
}
|
|
469
|
+
let response = try await activeSession.respond(to: prompt)
|
|
470
|
+
return response.content
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
Serialize all Foundation Model access through a single coordinator to prevent
|
|
476
|
+
Neural Engine contention.
|
|
477
|
+
|
|
478
|
+
## Prompt Design Best Practices
|
|
479
|
+
|
|
480
|
+
1. **Be concise.** The context window covers both input and output tokens.
|
|
481
|
+
Check `SystemLanguageModel.default.contextSize` for the current limit.
|
|
482
|
+
2. **Use bracketed placeholders** in instructions: `[descriptive example]`.
|
|
483
|
+
3. **Use "DO NOT" in all caps** for behavioral prohibitions.
|
|
484
|
+
4. **Provide up to 5 few-shot examples** for consistent output.
|
|
485
|
+
5. **Use length qualifiers:** "in a few words", "in three sentences".
|
|
486
|
+
6. **Estimate token usage** with `SystemLanguageModel.default.tokenCount(for:)`
|
|
487
|
+
to avoid exceeding the context window.
|
|
488
|
+
|
|
489
|
+
## Feedback
|
|
490
|
+
|
|
491
|
+
Log feedback for model improvement:
|
|
492
|
+
|
|
493
|
+
```swift
|
|
494
|
+
let data = session.logFeedbackAttachment(
|
|
495
|
+
sentiment: .negative,
|
|
496
|
+
issues: [
|
|
497
|
+
LanguageModelFeedback.Issue(
|
|
498
|
+
category: .didNotFollowInstructions,
|
|
499
|
+
explanation: "Ignored the word count constraint"
|
|
500
|
+
)
|
|
501
|
+
],
|
|
502
|
+
desiredOutput: nil
|
|
503
|
+
)
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
Issue categories: `.didNotFollowInstructions`, `.incorrect`,
|
|
507
|
+
`.stereotypeOrBias`, `.suggestiveOrSexual`, `.tooVerbose`,
|
|
508
|
+
`.triggeredGuardrailUnexpectedly`, `.unhelpful`, `.vulgarOrOffensive`.
|