Closes ME-04 (Plan 04-05 deferred state). AppDelegate.applicationWill FinishLaunching now instantiates BoundedAsyncChannel<ReplayEvent>( capacity: 2048, policy: .dropOldest) for the orch→replay seam — the production instance that Plan 04-05's ChannelTopologyTests CT2 only verified as a primitive. - App/MCP/MCPRuntimeWiring.swift: dependency-graph constructor for the full chain (MCPClient → ToolRegistry → MCPToolDispatcher → ConfirmingToolDispatcher) plus a compose() test seam. The ConfirmationPresenterHolder breaks the broker↔presenter cyclic init. - App/MCP/ReplayingToolResultObserver.swift: SEC-07 observer that records pre-/post-sanitize bytes via two ReplayEvent.toolResultFull rows (one canonical, one ':raw'-suffixed toolUseId). Uses an injected turnIDResolver closure since orchestrator wiring lands in a later plan. - AppDelegate stores the orchToReplayChannel + drain Task and tears them down on applicationWillTerminate. - App/Tests/AppTests/MCPRuntimeWiringTests.swift: 3 structural tests (compose-returns-ConfirmingToolDispatcher; channel-capacity-+-policy; MCPRuntime-struct-addressable). No xcodebuild test launch — known Xcode 26 RunningBoard blocker per .planning/debug/. Deviations: - Replay / AgentCore / MCP / Bus Package.swifts had implicit transitive swift-log deps that SPM tolerated but Xcode framework-linker rejects once the App pulls them in as separate frameworks. Added explicit swift-log deps to all four (Rule 3, blocking). - HudStateCoordinatorBusWiringTests qualified two HudState references to Jarvis.HudState — the new framework deps disturbed the App vs Bus symbol disambiguation (Rule 1, surgical). - The plan's plain ReplayEvent.toolResultFull(toolUseId:rawBytes: sanitizedBytes:) variant doesn't exist (Phase 4 schema closed); the observer writes two rows with a ':raw' toolUseId suffix instead. xcodebuild build (Debug) succeeds with the new MCP deps wired into the App target. Test build (build-for-testing) also succeeds; runtime test execution is the documented Xcode 26 RunningBoard blocker per 03-05-PLAN.
38 lines
1.2 KiB
Swift
38 lines
1.2 KiB
Swift
// swift-tools-version:6.0
|
|
import PackageDescription
|
|
|
|
let package = Package(
|
|
name: "Bus",
|
|
platforms: [.macOS(.v13)],
|
|
products: [
|
|
.library(name: "Bus", targets: ["Bus"]),
|
|
],
|
|
dependencies: [
|
|
.package(path: "../Logging"),
|
|
// Plan 05-05 deviation (Rule 3, blocking): WebviewBridge imports
|
|
// swift-log Logger directly. Same fix pattern as Replay /
|
|
// AgentCore / MCP — Xcode framework linker is stricter than SPM.
|
|
.package(url: "https://github.com/apple/swift-log.git", from: "1.5.0"),
|
|
],
|
|
targets: [
|
|
.target(
|
|
name: "Bus",
|
|
dependencies: [
|
|
.product(name: "JarvisLogging", package: "Logging"),
|
|
.product(name: "Logging", package: "swift-log"),
|
|
],
|
|
resources: [.process("Resources")],
|
|
swiftSettings: [.swiftLanguageMode(.v6)],
|
|
linkerSettings: [
|
|
.linkedFramework("WebKit"),
|
|
]
|
|
),
|
|
.testTarget(
|
|
name: "BusTests",
|
|
dependencies: ["Bus"],
|
|
resources: [.process("Fixtures")],
|
|
swiftSettings: [.swiftLanguageMode(.v6)]
|
|
),
|
|
]
|
|
)
|