Files
james.maes 1aeec87682 feat(04-05): DevOverlay package + DevSnapshot/ToolCallRow in AgentOrchestrator (OBS-01)
- NSPanel-backed DevOverlayWindow (.floating + .nonactivating) hidden by default
- SwiftUI DevOverlayView renders OBS-01 surface: state/turn, provider/model,
  token counts, cache creation/read + hit %, latency, last-5 tool calls
- @Observable @MainActor DevOverlayViewModel — single write path via apply()
- DevOverlayBridge pumps BoundedAsyncChannel<DevSnapshot> → ViewModel
- DevSnapshot + ToolCallRow live in AgentOrchestrator target (Rule 3
  deviation from plan's files_modified: DevSnapshotEmitter consumes both
  OrchestratorEvent and DevSnapshot, so parking both in AgentOrchestrator
  avoids the circular AgentOrchestrator→DevOverlay→AgentOrchestrator dep)
- Additive OrchestratorEvent.usage(turnId:usage:) — surfaces TurnUsage to
  DevOverlay without reading replay; no nonce (SEC-06 preserved)
- AgentOrchestrator now emits .usage on LLMEvent.usage alongside replay write
- 14 DevOverlay tests pass; 114 AgentCore tests pass (no regression)
2026-04-24 18:32:56 -05:00

38 lines
1.2 KiB
Swift

// swift-tools-version:6.0
import PackageDescription
// macOS 14 floor: @Observable (Observation framework) is macOS 14+. The rest
// of Phase 1 stays at macOS 13; DevOverlay is a developer-facing optional
// surface so raising its floor is acceptable.
let package = Package(
name: "DevOverlay",
platforms: [.macOS(.v14)],
products: [
.library(name: "DevOverlay", targets: ["DevOverlay"]),
],
dependencies: [
.package(path: "../AgentCore"),
.package(path: "../Logging"),
],
targets: [
.target(
name: "DevOverlay",
dependencies: [
.product(name: "AgentCore", package: "AgentCore"),
.product(name: "AgentOrchestrator", package: "AgentCore"),
.product(name: "JarvisLogging", package: "Logging"),
],
swiftSettings: [.swiftLanguageMode(.v6)]
),
.testTarget(
name: "DevOverlayTests",
dependencies: [
"DevOverlay",
.product(name: "AgentCore", package: "AgentCore"),
.product(name: "AgentOrchestrator", package: "AgentCore"),
],
swiftSettings: [.swiftLanguageMode(.v6)]
),
]
)