- 애플이 오늘 배포한 Apple Support app v5.13 업데이트에 Claude.md 파일을 포함한 채 배포
- 아마도 해당 파일은 Apple이 의도적으로 공개한 항목이 아니라 실수로 남겨진 것으로 파악됨
- 이후 긴급히 출시된 5.13.1 업데이트에서 해당 파일은 제거됨
# Chat - Conversational Support (Juno AI + Live Agents)
- Uses **AsyncStream** for real-time updates, NOT Combine (unlike rest of app).
Streams are recreated on each access; old ones are finished.
- Service providers are **actors** (not `@MainActor` classes) for thread-safe
concurrent message handling.
- **Multi-backend via protocol:** `ChatViewModelServiceProvider` abstracts
Juno AI (`SupportAssistantAPIProvider`), live agents (`ChatKitChatServiceProvider`),
and dev mocks. View model doesn't know which backend is active.
- **Conditional compilation is heavy:** `#if JUNO_ENABLED`,
`#if canImport(CCChatKit)`, `#if DEV_BUILD`. Some files nest these.
Check xcconfig for enabled flags.
- **Three participant roles:** `.client` (user), `.agent` (live Apple Support),
`.assistant` (AI). Route message handling per role.
- Messages are wrapped in `MessageGroup` (UUID container) to avoid SwiftUI ID
collisions (rdar://164022273). Don't flatten.
- CCChatkit is callback-based; bridged to async/await via `Task` wrappers in
`ChatFacadeServiceProvider`
- Session persistence: Keychain for `ChatInfo` (reconnection), file cache in
`CachesDirectory/TemporaryChatTranscripts/` for transcripts.
# SAComponents - Shared UI Component Library
- Components are purely UI - no business logic, no service dependencies.
- UIKit components use `UIContentConfiguration` protocol with preset
factory methods (e.g., `.cel1()` `.callToActionProminent()`).
- SwiftUI components provide convenience modifiers on `View`
(e.g., `platterBackground()`, `frame (square:)`).
- Presets live in `Presets/` as static factory methods on enums.
- Platform variants use `#if os(visionS)` guards.
iOs version conditionals use `#available`.
- DocC catalog in 'SAComponents.docc/ with contributor guide.
Update docs when adding components.
- Always include `#Preview {}` showing multiple states for new components.