- AppDelegate gains installMemory() and installVision() mirroring installVoice's six-step pattern. Memory installs BEFORE voice (memory ready before first turn); vision AFTER voice (camera lifecycle independent). - MemoryStore + MemoryExtractionOrchestrator + MemoryExtractionCoordinator constructed; AppDelegateMemoryReplaySink bridges Memory.MemoryReplaySink -> Replay.ReplayLog.record(_:for:). Coordinator wiring deferred until AgentOrchestrator lands in AppDelegate (documented in SUMMARY). - CameraCapture + PresenceMonitor instantiated; the SINGLE PresenceSignalBus reference (owned by PresenceMonitor) flows via AppDelegateContextBuilderAdapter to ContextBuilder.installPresence and via hudStateCoordinator?.attachPresence to the HUD coordinator. VISION-03 boundary preserved. - VisionRouter constructed with T1=Ollama, T2=Ollama (sidecar deferred), T3= Anthropic (key from Keychain); the runTurn dispatcher branch is deferred until AgentOrchestrator wires up. - DisablePresence menu-bar toggle wired alongside MuteWakeWord. - BannerContent.cameraDenied + cameraRevoked presets; cameraDegradationTask watches CameraCapture.degradationStream and enqueues banners. - HudStateCoordinator.attachPresence is a generic AsyncSequence subscriber preserving HUD-08 single-writer invariant (presence is record-only). - ContextBuilder.installPresence(_:) is a static no-op drain (deferred wiring for the future per-turn system-prompt enricher). - TS BUS_PROTOCOL_VERSION 2.0.0 -> 2.1.0; sessionHistory + TurnRow added to the BusOutbound discriminator union with full decode arm. Round-trip test bumped accordingly. scripts/check-bus-protocol-version.sh now passes.
23 lines
1001 B
Swift
23 lines
1001 B
Swift
import Foundation
|
|
import JarvisVision
|
|
|
|
/// Static facade for routing `PresenceSignalBus.stream` into the
|
|
/// `ContextBuilder` surface owned by Plan 07-05.
|
|
///
|
|
/// 07-06 calls `AppDelegateContextBuilderAdapter.attachPresence(bus.stream)`
|
|
/// from `installVision()`; the adapter forwards into
|
|
/// `ContextBuilder.installPresence(_:)` which currently drains the stream
|
|
/// as a deferred-wiring no-op (per the 07-06 SUMMARY's "Deferred wiring"
|
|
/// section). The actual per-turn system-prompt enrichment lands in a
|
|
/// follow-on plan.
|
|
///
|
|
/// VISION-03 preserved: the adapter is the ONLY caller into ContextBuilder
|
|
/// from the App target; the call passes the AsyncStream by reference. The
|
|
/// adapter has no reference to TTSEngine or AgentOrchestrator submit paths.
|
|
/// `scripts/check-presence-vision-isolation.sh` confirms.
|
|
public enum AppDelegateContextBuilderAdapter {
|
|
public static func attachPresence(_ stream: AsyncStream<PresenceEvent>) {
|
|
ContextBuilder.installPresence(stream)
|
|
}
|
|
}
|