From e52c556bfdee5a0c91f1fbd7eb1d2e0157c9f4d9 Mon Sep 17 00:00:00 2001 From: dragon Date: Fri, 23 Oct 2026 23:55:04 +0800 Subject: [PATCH 1/3] daemon: the status carries the live Activities GET /v1/status and its stream now include `activities`: each live Activity as the resident session's list_activities gives it (agent, task-card title, project, working or needs_input, newest first). The korekore sidebar draws the box from them instead of asking it for a screenshot, which would tie up the UART bridge. Every event sent to the box now also pushes a new status, so the stream follows the cards. Older apps ignore the field. Co-Authored-By: Claude Opus 5.5 --- .../Korekore => KorekoreUI}/KorekoreAssets.swift | 0 .../Korekore => KorekoreUI}/KorekoreTheme.swift | 0 daemon/src/main.rs | 10 +++++++++- daemon/src/status.rs | 2 ++ docs/app.md | 2 +- 5 files changed, 12 insertions(+), 2 deletions(-) rename app/Sources/{VibeBuddy/Korekore => KorekoreUI}/KorekoreAssets.swift (100%) rename app/Sources/{VibeBuddy/Korekore => KorekoreUI}/KorekoreTheme.swift (100%) diff --git a/app/Sources/VibeBuddy/Korekore/KorekoreAssets.swift b/app/Sources/KorekoreUI/KorekoreAssets.swift similarity index 100% rename from app/Sources/VibeBuddy/Korekore/KorekoreAssets.swift rename to app/Sources/KorekoreUI/KorekoreAssets.swift diff --git a/app/Sources/VibeBuddy/Korekore/KorekoreTheme.swift b/app/Sources/KorekoreUI/KorekoreTheme.swift similarity index 100% rename from app/Sources/VibeBuddy/Korekore/KorekoreTheme.swift rename to app/Sources/KorekoreUI/KorekoreTheme.swift diff --git a/daemon/src/main.rs b/daemon/src/main.rs index 79170f20..12fac1f5 100644 --- a/daemon/src/main.rs +++ b/daemon/src/main.rs @@ -162,6 +162,10 @@ impl AppState { async fn snapshot(&self) -> Status { let device = self.device.lock().await.clone(); let updates = self.updates.lock().await.status(&device, self.update_checks_enabled().await); + let (today, activities) = { + let tracker = self.activities.lock().await; + (tracker.today(), tracker.summaries()) + }; Status { daemon: DaemonInfo { build: build_identity(self.app_version.as_deref()), @@ -169,7 +173,8 @@ impl AppState { app_version: self.app_version.clone(), }, device, - today: self.activities.lock().await.today(), + today, + activities, hooks: self.hooks_seen.lock().await.clone(), operation: self.operation.lock().await.clone(), config: self.config.lock().await.clone(), @@ -1384,6 +1389,8 @@ async fn sweep_expired_activities(state: AppState) { /// Shared path for background tasks sending events. A full queue or encoding failure is only logged and doesn't affect the next round. fn send_event(state: &AppState, event: Event) { + // What the box shows changed, so the apps' picture of it (the Activities in the status) did too. + state.notify_status(); match event.to_ndjson() { Ok(frame) => { if let Err(error) = state.transport.send(frame) { @@ -1912,6 +1919,7 @@ mod tests { .unwrap(); let _ = post_codex_hook(State(state.clone()), Json(hook)).await; assert_eq!(state.activities.lock().await.summaries().len(), 1); + assert_eq!(state.snapshot().await.activities.len(), 1, "the status carries the Activities"); let _ = std::fs::remove_dir_all(dir); } diff --git a/daemon/src/status.rs b/daemon/src/status.rs index f94929a1..2166a485 100644 --- a/daemon/src/status.rs +++ b/daemon/src/status.rs @@ -342,6 +342,8 @@ pub struct Status { pub daemon: DaemonInfo, pub device: DeviceState, pub today: TodaySummary, + /// Every Activity, newest first: what the box's task cards show, for the apps' picture of the box (ADR-0021). + pub activities: Vec, pub hooks: HooksSeen, pub operation: Option, pub config: Config, diff --git a/docs/app.md b/docs/app.md index 62fba7d5..5ad44f0e 100644 --- a/docs/app.md +++ b/docs/app.md @@ -28,7 +28,7 @@ The app is VibeBuddy's graphical interface on the Mac: a menu bar icon plus a se It keeps using local HTTP on `127.0.0.1:7331`. New additions: -- `GET /v1/status`: link, current mode, firmware and daemon build identifiers, today's stats, and the time of the most recent hook event. +- `GET /v1/status`: link, current mode, firmware and daemon build identifiers, today's stats, the live Activities (`activities`: agent, task-card title, project, `working`/`needs_input`, newest first, as the resident session's `list_activities` gives them; the korekore sidebar draws the box from them), and the time of the most recent hook event. - `GET /v1/status/stream`: SSE, pushed whenever the status changes. - `GET /v1/resident` and `GET /v1/resident/history`: whether the resident session is on and ready (Codex installed and signed in, or Claude Code installed with the user's Anthropic API key), which Agent answers, a change marker for its history, and its last exchanges, for the Conversation tab; `PUT /v1/resident/brain` and `PUT`/`DELETE /v1/resident/anthropic-key` for its settings, which are kept out of `/v1/config` (the key is never sent back). - Write operations: write a voice pack, update firmware, take a screenshot, restart the daemon itself. From 2564940622f2ab3e0af78ea1b24d6fa63a2f5a00 Mon Sep 17 00:00:00 2001 From: dragon Date: Fri, 23 Oct 2026 23:55:04 +0800 Subject: [PATCH 2/3] korekore: the window, the sidebar with the mini box, and the menu bar Phase 2a of docs/design/korekore, behind VIBEBUDDY_UI=korekore on both apps; without it nothing changes. - Mac: a new KorekoreUI library holds the views, fed plain values: the settings window (cream, 3 px ink outline, radius 20, solid shadow, the real window buttons moved into the sidebar), the sidebar with the mini box redrawn from the status, and the 360 px menu bar panel opened from a Kore status item (NSStatusItem + NSPanel, which can switch with the app's UI, unlike MenuBarExtra). KorekorePreview draws them with sample data. - Linux: the same window inside, sidebar and mini box in iced, and Kore in the tray; the tray keeps its native menu. iced_test draws them headless. - BoxPicture (Swift and Rust) turns the status into what the box shows: mood, link, the newest three cards without their prefix, today's stats. - Pages are placeholders until 2b. New strings have zh-Hans entries, and check-localization now reads desktop/src's subfolders too. Co-Authored-By: Claude Opus 5.5 --- Cargo.lock | 27 ++ .../zh-Hans.lproj/Localizable.strings | 27 ++ app/Package.swift | 7 +- app/Sources/KorekorePreview/main.swift | 95 ++++++ app/Sources/KorekoreUI/Components.swift | 112 +++++++ app/Sources/KorekoreUI/KorekoreAssets.swift | 11 +- app/Sources/KorekoreUI/KorekoreTheme.swift | 182 +++++------ app/Sources/KorekoreUI/MenuPanel.swift | 200 ++++++++++++ app/Sources/KorekoreUI/MiniBox.swift | 88 ++++++ app/Sources/KorekoreUI/Settings.swift | 206 +++++++++++++ app/Sources/KorekoreUI/SettingsWindow.swift | 57 ++++ app/Sources/SelfTest/main.swift | 24 ++ app/Sources/VibeBuddy/AppDelegate.swift | 27 +- .../VibeBuddy/Korekore/KorekoreWindows.swift | 91 ++++++ .../VibeBuddyCore/Korekore/BoxPicture.swift | 90 ++++++ .../VibeBuddyCore/Korekore/PixelSprite.swift | 11 + app/Sources/VibeBuddyCore/Status.swift | 23 +- desktop/Cargo.toml | 4 + desktop/src/korekore/mod.rs | 174 ++++++++++- desktop/src/korekore/picture.rs | 193 ++++++++++++ desktop/src/korekore/snapshots.rs | 60 ++++ desktop/src/korekore/view.rs | 285 ++++++++++++++++++ desktop/src/main.rs | 39 ++- desktop/src/status.rs | 15 + desktop/src/tray.rs | 11 + docs/design/korekore/README.md | 2 + .../screenshots/phase-2a/linux-mini-box.png | Bin 0 -> 23331 bytes .../screenshots/phase-2a/linux-window.png | Bin 0 -> 84031 bytes .../screenshots/phase-2a/mac-menu-icons.png | Bin 0 -> 1220 bytes .../phase-2a/mac-menu-panel-no-link.png | Bin 0 -> 55072 bytes .../screenshots/phase-2a/mac-menu-panel.png | Bin 0 -> 58935 bytes .../screenshots/phase-2a/mac-mini-box.png | Bin 0 -> 30285 bytes .../screenshots/phase-2a/mac-window.png | Bin 0 -> 112923 bytes tools/check-localization.py | 4 +- tools/korekore-codegen.py | 34 +-- 35 files changed, 1957 insertions(+), 142 deletions(-) create mode 100644 app/Sources/KorekorePreview/main.swift create mode 100644 app/Sources/KorekoreUI/Components.swift create mode 100644 app/Sources/KorekoreUI/MenuPanel.swift create mode 100644 app/Sources/KorekoreUI/MiniBox.swift create mode 100644 app/Sources/KorekoreUI/Settings.swift create mode 100644 app/Sources/KorekoreUI/SettingsWindow.swift create mode 100644 app/Sources/VibeBuddy/Korekore/KorekoreWindows.swift create mode 100644 app/Sources/VibeBuddyCore/Korekore/BoxPicture.swift create mode 100644 desktop/src/korekore/picture.rs create mode 100644 desktop/src/korekore/snapshots.rs create mode 100644 desktop/src/korekore/view.rs create mode 100644 docs/design/korekore/screenshots/phase-2a/linux-mini-box.png create mode 100644 docs/design/korekore/screenshots/phase-2a/linux-window.png create mode 100644 docs/design/korekore/screenshots/phase-2a/mac-menu-icons.png create mode 100644 docs/design/korekore/screenshots/phase-2a/mac-menu-panel-no-link.png create mode 100644 docs/design/korekore/screenshots/phase-2a/mac-menu-panel.png create mode 100644 docs/design/korekore/screenshots/phase-2a/mac-mini-box.png create mode 100644 docs/design/korekore/screenshots/phase-2a/mac-window.png diff --git a/Cargo.lock b/Cargo.lock index a556502b..062a0dcb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1857,6 +1857,32 @@ dependencies = [ "thiserror 2.0.20", ] +[[package]] +name = "iced_selector" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1442ccc30959cc48b3a624233521ef7f3bc3e06528b6fe306c3a775fbddc4fe" +dependencies = [ + "iced_core", +] + +[[package]] +name = "iced_test" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b56c26cc6e63958ce6be06a68fa3136fd5f646da6302ee12abf1a0f311dd0166" +dependencies = [ + "iced_futures", + "iced_program", + "iced_renderer", + "iced_runtime", + "iced_selector", + "nom", + "png 0.18.1", + "sha2", + "thiserror 2.0.20", +] + [[package]] name = "iced_tiny_skia" version = "0.14.1" @@ -5122,6 +5148,7 @@ dependencies = [ "chrono", "futures", "iced", + "iced_test", "image", "ksni", "reqwest", diff --git a/app/Localization/zh-Hans.lproj/Localizable.strings b/app/Localization/zh-Hans.lproj/Localizable.strings index c39e9001..c999a626 100644 --- a/app/Localization/zh-Hans.lproj/Localizable.strings +++ b/app/Localization/zh-Hans.lproj/Localizable.strings @@ -346,3 +346,30 @@ "Claude Code answers voice commands only with your own Anthropic API key. Add your key above." = "Claude Code 只用你自己的 Anthropic API 密钥回答语音指令。请在上面填入你的密钥。"; "Or let Claude Code answer, with your own Anthropic API key: add it above." = "也可以让 Claude Code 来回答,用你自己的 Anthropic API 密钥:在上面填入即可。"; "How to install Claude Code" = "如何安装 Claude Code"; + +/* korekore UI (ADR-0021) */ +"%lld done · %lld asks today" = "今天完成 %lld 个 · 提问 %lld 次"; +"DAEMON NOT RUNNING" = "daemon 没在运行"; +"BOX ONLINE · %@" = "盒子在线 · %@"; +"NO BOX LINKED" = "没有连上盒子"; +"app %@ · box fw %@" = "App %@ · 盒子固件 %@"; +"app %@" = "App %@"; +"This page comes with the next step of korekore." = "这一页会在 korekore 的下一步做好。"; +"%@ done" = "完成 %@"; +"%@ asks" = "提问 %@"; +"%@ busy" = "忙碌 %@"; +"1 AGENT" = "1 个 Agent"; +"%lld AGENTS" = "%lld 个 Agent"; +"box online · %@ · fw %@" = "盒子在线 · %@ · 固件 %@"; +"box online · %@" = "盒子在线 · %@"; +"no box linked" = "没有连上盒子"; +"Who lives in the box" = "谁住在盒子里"; +"Who the box watches" = "盒子替你看着谁"; +"Hold K0 on the box and ask" = "按住盒子上的 K0 提问"; +"The box, its firmware and its network" = "盒子、固件和网络"; +"How korekore behaves on this Mac" = "korekore 在这台 Mac 上怎么工作"; +"How korekore behaves on this computer" = "korekore 在这台电脑上怎么工作"; +"For when something's off" = "出问题时来这里"; +"Check for updates…" = "检查更新…"; +"Report a problem…" = "报告问题…"; +"Quit korekore (the box goes offline)" = "退出 korekore(盒子将离线)"; diff --git a/app/Package.swift b/app/Package.swift index d0794247..6cdd2de6 100644 --- a/app/Package.swift +++ b/app/Package.swift @@ -13,9 +13,11 @@ let package = Package( targets: [ // Pure logic: status decoding, menu state derivation, hook config merging, voice pack parsing. No UI. .target(name: "VibeBuddyCore", path: "Sources/VibeBuddyCore"), + // The korekore UI's views (ADR-0021), fed plain values so KorekorePreview can draw them without the app. + .target(name: "KorekoreUI", dependencies: ["VibeBuddyCore"], path: "Sources/KorekoreUI"), .executableTarget( name: "VibeBuddy", - dependencies: ["VibeBuddyCore", .product(name: "Sparkle", package: "Sparkle")], + dependencies: ["VibeBuddyCore", "KorekoreUI", .product(name: "Sparkle", package: "Sparkle")], path: "Sources/VibeBuddy", // build-app.sh puts Sparkle.framework in Contents/Frameworks. linkerSettings: [.unsafeFlags(["-Xlinker", "-rpath", "-Xlinker", "@executable_path/../Frameworks"])] @@ -23,5 +25,8 @@ let package = Package( // The command line tools have neither XCTest nor swift-testing; the view-model seams are // guarded by this self-test executable: `swift run SelfTest`. .executableTarget(name: "SelfTest", dependencies: ["VibeBuddyCore"], path: "Sources/SelfTest"), + // Draws the korekore views with sample data into PNGs, to set beside the design canvas: + // `swift run --package-path app KorekorePreview `. + .executableTarget(name: "KorekorePreview", dependencies: ["KorekoreUI"], path: "Sources/KorekorePreview"), ] ) diff --git a/app/Sources/KorekorePreview/main.swift b/app/Sources/KorekorePreview/main.swift new file mode 100644 index 00000000..e6f3665b --- /dev/null +++ b/app/Sources/KorekorePreview/main.swift @@ -0,0 +1,95 @@ +// Draws the korekore views with the canvas's sample data into PNGs (2×), to set beside the design's boards. +// `swift run --package-path app KorekorePreview [fonts dir]`; the fonts default to fonts/korekore. +import AppKit +import KorekoreUI +import SwiftUI +import VibeBuddyCore + +let arguments = CommandLine.arguments +guard arguments.count >= 2 else { + print("usage: KorekorePreview [fonts dir]") + exit(2) +} +let output = URL(fileURLWithPath: arguments[1]) +KorekoreAssets.registerFonts(in: URL(fileURLWithPath: arguments.count > 2 ? arguments[2] : "fonts/korekore")) +try FileManager.default.createDirectory(at: output, withIntermediateDirectories: true) + +func picture(_ activities: [ActivitySummary], connected: Bool = true, mode: String = "duty") -> BoxPicture { + let json = """ + {"daemon":{"build":"0.5.0"},"device":{"connected":\(connected),"bridge":false,"mode":"\(mode)","firmware_version":"0.5.0"}, + "today":{"done":7,"asks":3,"busy_seconds":15120},"hooks":{},"config":{"notify_link":true}} + """ + var status = try! StatusCoding.decoder().decode(Status.self, from: Data(json.utf8)) + status.activities = activities + return BoxPicture.derive(status: status, daemonAlive: true) +} + +// The canvas's sidebar sample: three cards, all working. +let working = picture([ + ActivitySummary(agent: "claude-code", title: "CC:Add Chinese to the box", project: "vibebuddy", state: "working"), + ActivitySummary(agent: "codex", title: "CX:Fix voice reply", project: "vibebuddy", state: "working"), + ActivitySummary(agent: "github-actions", title: "CI:App tests", project: "vibebuddy", state: "working"), +]) +let asking = picture([ + ActivitySummary(agent: "codex", title: "CX:Review changes", project: "vibebuddy", state: "needs_input"), + ActivitySummary(agent: "claude-code", title: "CC:Add Chinese to the box", project: "vibebuddy", state: "working"), +]) +let quiet = picture([]) +let unlinked = picture([], connected: false) +let versions = KorekoreVersions(app: "0.5.0", firmware: "0.5.0") +let noActions = KorekoreMenuActions(settings: {}, checkForUpdates: {}, reportProblem: {}, quit: {}, restartDaemon: {}) + +@MainActor func save(_ name: String, _ view: V) { + let renderer = ImageRenderer(content: view.environment(\.colorScheme, .light)) + renderer.scale = 2 + guard let image = renderer.cgImage else { + print("could not render \(name)") + return + } + let data = NSBitmapImageRep(cgImage: image).representation(using: .png, properties: [:])! + try! data.write(to: output.appendingPathComponent("\(name).png")) + print("wrote \(name).png") +} + +/// A board as the canvas frames it: 960 × 820 on the mockup backdrop, the window inset 24. +@MainActor func window(_ picture: BoxPicture, _ section: KorekoreSection) -> some View { + KorekoreSettings(picture: picture, versions: versions, sections: KorekoreSection.allCases, + selection: .constant(section)) { _ in KorekorePagePending() } + .padding(24) + .frame(width: 960, height: 820) + .background(KorekoreTheme.Colors.backdrop) +} + +MainActor.assumeIsolated { + save("window-character", window(working, .character)) + save("window-device-asking", window(asking, .device)) + for (name, sample) in [("working", working), ("asking", asking), ("quiet", quiet), ("no-link", unlinked)] { + save("minibox-\(name)", MiniBox(picture: sample).padding(12).background(KorekoreTheme.Colors.paper)) + } + save("menu-panel", KorekoreMenuPanel(picture: working, actions: noActions) + .padding(24).background(Color(korekoreRGB: 0xC9C3D8))) + save("menu-panel-no-link", KorekoreMenuPanel(picture: unlinked, actions: noActions) + .padding(24).background(Color(korekoreRGB: 0xC9C3D8))) + save("menu-icons", HStack(spacing: 16) { + ForEach(Array([working, asking, unlinked].enumerated()), id: \.offset) { _, sample in + Image(nsImage: KorekoreMenuIcon.image(for: sample)).interpolation(.none) + } + }.padding(8).background(Color.white.opacity(0.75))) +} + +// The real window, system buttons included, drawn off screen: checks the frame and where the buttons land. +MainActor.assumeIsolated { + NSApplication.shared.setActivationPolicy(.prohibited) + let window = KorekoreSettingsWindow(rootView: KorekoreSettings( + picture: working, versions: versions, sections: KorekoreSection.allCases, selection: .constant(.character) + ) { _ in KorekorePagePending() }) + window.setFrameOrigin(NSPoint(x: -20_000, y: 0)) + window.orderFrontRegardless() + RunLoop.main.run(until: Date().addingTimeInterval(1)) + let frame = window.contentView!.superview! + let bitmap = frame.bitmapImageRepForCachingDisplay(in: frame.bounds)! + frame.cacheDisplay(in: frame.bounds, to: bitmap) + try! bitmap.representation(using: .png, properties: [:])!.write(to: output.appendingPathComponent("window-real.png")) + print("wrote window-real.png") + window.close() +} diff --git a/app/Sources/KorekoreUI/Components.swift b/app/Sources/KorekoreUI/Components.swift new file mode 100644 index 00000000..0c987252 --- /dev/null +++ b/app/Sources/KorekoreUI/Components.swift @@ -0,0 +1,112 @@ +import SwiftUI +import VibeBuddyCore + +typealias Theme = KorekoreTheme + +extension Font { + /// A type style from tokens.json. + static func korekore(_ style: KorekoreTextStyle) -> Font { + .custom(style.font, fixedSize: style.size) + } + + /// M PLUS Rounded 1c at a size the type styles don't name (the sidebar's 26 px wordmark, say). + static func rounded(_ size: CGFloat, weight: Int = 800) -> Font { + let name = switch weight { + case ..<550: Theme.FontName.roundedRegular + case ..<750: Theme.FontName.roundedBold + default: Theme.FontName.roundedExtraBold + } + return .custom(name, fixedSize: size) + } + + /// DotGothic16, for the machine-ish bits: state words, versions, counts. + static func pixel(_ size: CGFloat) -> Font { + .custom(Theme.FontName.pixelRegular, fixedSize: size) + } +} + +/// A sprite from docs/design/korekore at a whole-number scale, every pixel a crisp square. +struct Sprite: View { + let name: String + var scale = 1 + var tint: UInt32? + /// Kore asleep without a link: CSS `grayscale(1) brightness(0.75)`, as the canvas draws it. + var gray = false + + var body: some View { + if let sprite = KorekoreSprites.all[name].map({ gray ? $0.grayed(brightness: 0.75) : $0 }), + let image = sprite.image(scale: scale, tint: tint) { + Image(nsImage: image) + .interpolation(.none) + .frame(width: CGFloat(sprite.width * scale), height: CGFloat(sprite.height * scale)) + } + } +} + +/// The "your vibebuddy" bitmap tag: 2 px dots, solid, in `kore-pink-text` beside small wordmarks. +struct PixelTag: View { + var dot = 2 + var color: UInt32 = 0xC2335B + + var body: some View { + Sprite(name: "tag-your-vibebuddy", scale: dot, tint: color) + } +} + +/// The sticker look: a fill, an ink outline inside the edge, and a solid ink shadow straight down, no blur. +struct Sticker: ViewModifier { + var radius: CGFloat + var fill: Color = Theme.Colors.paper + var stroke: CGFloat = Theme.Stroke.base + var outline: Color = Theme.Colors.ink + var shadow: CGFloat = Theme.Sticker.sm + + func body(content: Content) -> some View { + let shape = RoundedRectangle(cornerRadius: radius, style: .continuous) + content + .background(shape.fill(fill)) + .clipShape(shape) + .overlay(shape.strokeBorder(outline, lineWidth: stroke)) + .background(shape.fill(Theme.Colors.ink).offset(y: shadow)) + } +} + +extension View { + func sticker(radius: CGFloat, fill: Color = Theme.Colors.paper, stroke: CGFloat = Theme.Stroke.base, + outline: Color = Theme.Colors.ink, shadow: CGFloat = Theme.Sticker.sm) -> some View { + modifier(Sticker(radius: radius, fill: fill, stroke: stroke, outline: outline, shadow: shadow)) + } +} + +/// How each state reads on the box: its word, its colour and Kore's face. +extension BoxPicture.Mood { + var word: String { + switch self { + case .ready: "READY" + case .working: "WORKING" + case .input: "ASK" + case .pomodoro: "POMODORO" + case .leisure: "LEISURE" + case .noLink: "NO LINK" + } + } + + var color: Color { + switch self { + case .ready, .leisure: Theme.Colors.lavender + case .working: Theme.Colors.sky + case .input: Theme.Colors.sun + case .pomodoro: Theme.Colors.korePink + case .noLink: Theme.Colors.mist + } + } + + var expression: String { + switch self { + case .ready, .pomodoro, .leisure: "kore-normal" + case .working: "kore-working" + case .input: "kore-input" + case .noLink: "kore-sleep" + } + } +} diff --git a/app/Sources/KorekoreUI/KorekoreAssets.swift b/app/Sources/KorekoreUI/KorekoreAssets.swift index c9863e56..5108eefb 100644 --- a/app/Sources/KorekoreUI/KorekoreAssets.swift +++ b/app/Sources/KorekoreUI/KorekoreAssets.swift @@ -3,11 +3,10 @@ import CoreText import VibeBuddyCore /// The korekore UI's fonts and sprite images (ADR-0021). -enum KorekoreAssets { - /// Makes the bundled fonts (Resources/fonts, from tools/korekore-fonts.py) available to this process only. - /// Called at launch when the korekore UI is on; the current UI keeps the system font. - static func registerFonts() { - let directory = Resources.resourcesDirectory.appendingPathComponent("fonts") +public enum KorekoreAssets { + /// Makes the fonts in `directory` (the bundle's Resources/fonts, from tools/korekore-fonts.py) available to this + /// process only. Called at launch when the korekore UI is on; the current UI keeps the system font. + public static func registerFonts(in directory: URL) { let fonts = (try? FileManager.default.contentsOfDirectory(at: directory, includingPropertiesForKeys: nil)) ?? [] for font in fonts where font.pathExtension == "ttf" { var error: Unmanaged? @@ -21,7 +20,7 @@ enum KorekoreAssets { extension PixelSprite { /// The sprite at `scale` whole times its size, one image pixel per screen point at 1×. Draw it with /// `.interpolation(.none)` and at exactly this size, so nothing resamples it. - func image(scale: Int, tint: UInt32? = nil) -> NSImage? { + public func image(scale: Int, tint: UInt32? = nil) -> NSImage? { let (outWidth, outHeight) = (width * scale, height * scale) let data = Data(rgba(scale: scale, tint: tint)) as CFData guard let provider = CGDataProvider(data: data), diff --git a/app/Sources/KorekoreUI/KorekoreTheme.swift b/app/Sources/KorekoreUI/KorekoreTheme.swift index 03bea5c3..0051a381 100644 --- a/app/Sources/KorekoreUI/KorekoreTheme.swift +++ b/app/Sources/KorekoreUI/KorekoreTheme.swift @@ -2,192 +2,192 @@ import SwiftUI /// The korekore design tokens (docs/design/korekore/tokens.json). -enum KorekoreTheme { - enum Colors { +public enum KorekoreTheme { + public enum Colors { /// Text, every outline (2-3 px), sticker shadows, selected nav row. Also the box's screen ground. - static let ink = Color(korekoreRGB: 0x1C1730) + public static let ink = Color(korekoreRGB: 0x1C1730) /// App window and brand ground. Text on it: ink, muted, kore-pink-text. - static let cream = Color(korekoreRGB: 0xFFF6E8) + public static let cream = Color(korekoreRGB: 0xFFF6E8) /// Cards, list rows, secondary buttons, inputs on cream. - static let paper = Color(korekoreRGB: 0xFFFFFF) + public static let paper = Color(korekoreRGB: 0xFFFFFF) /// Behind windows in mockups; the toggle track when off. - static let backdrop = Color(korekoreRGB: 0xE9E4F2) + public static let backdrop = Color(korekoreRGB: 0xE9E4F2) /// Dividers between rows inside a card (2 px). Never an outer border. - static let line = Color(korekoreRGB: 0xF1E7D6) + public static let line = Color(korekoreRGB: 0xF1E7D6) /// Secondary text on cream and paper (about 9:1). - static let muted = Color(korekoreRGB: 0x4A4360) + public static let muted = Color(korekoreRGB: 0x4A4360) /// Tertiary pixel text: versions, timestamps, footnotes (about 5:1 on cream). - static let muted2 = Color(korekoreRGB: 0x6B6482) + public static let muted2 = Color(korekoreRGB: 0x6B6482) /// Brand accent as a FILL: selected character border, progress, toggle on, Connect button, Pomodoro screen. Ink text on it (5.3:1). Never small text on cream. - static let korePink = Color(korekoreRGB: 0xF0587F) + public static let korePink = Color(korekoreRGB: 0xF0587F) /// Pink TEXT on cream or paper below 24 px: the small pixel tag, links, IN USE, kicker lines (5.0:1 on cream, 5.4:1 on paper). - static let korePinkText = Color(korekoreRGB: 0xC2335B) + public static let korePinkText = Color(korekoreRGB: 0xC2335B) /// The large bitmap tag (3-5 px dots) on cream or paper. Large-text contrast only. - static let korePinkTag = Color(korekoreRGB: 0xE2466F) + public static let korePinkTag = Color(korekoreRGB: 0xE2466F) /// Needs input: the one loud state. Full-screen takeover on the box; primary action fill in the app (ink text). - static let sun = Color(korekoreRGB: 0xFFD23F) + public static let sun = Color(korekoreRGB: 0xFFD23F) /// Working. Calm, silent. RUN pills, the WORKING word, Kore's ... marks. - static let sky = Color(korekoreRGB: 0x7CC8FF) + public static let sky = Color(korekoreRGB: 0x7CC8FF) /// Done. 3 s full-screen celebration on the box; done pills. - static let mint = Color(korekoreRGB: 0x6EE7B7) + public static let mint = Color(korekoreRGB: 0x6EE7B7) /// Failed. Border and words on Ink, never a full red screen. - static let peach = Color(korekoreRGB: 0xFF7A7A) + public static let peach = Color(korekoreRGB: 0xFF7A7A) /// Ready / idle and the ON DUTY label. - static let lavender = Color(korekoreRGB: 0xB9A8FF) + public static let lavender = Color(korekoreRGB: 0xB9A8FF) /// No link. The whole box screen goes gray; mist is for the big NO LINK word (4.1:1 on box-gray-ground, large text only). - static let mist = Color(korekoreRGB: 0x8A85A3) + public static let mist = Color(korekoreRGB: 0x8A85A3) /// Small text on the no-link screen (6.0:1 on box-gray-ground). - static let mistText = Color(korekoreRGB: 0xA8A3BD) + public static let mistText = Color(korekoreRGB: 0xA8A3BD) /// Done / watching / joined as TEXT on cream or paper (5.0:1 on cream; mint fails as text). - static let doneText = Color(korekoreRGB: 0x177A56) + public static let doneText = Color(korekoreRGB: 0x177A56) /// Needs input / waiting as TEXT on cream or paper (5.3:1 on cream; sun fails as text). - static let waitText = Color(korekoreRGB: 0x8A5F00) + public static let waitText = Color(korekoreRGB: 0x8A5F00) /// Working / busy as TEXT on cream or paper. - static let workText = Color(korekoreRGB: 0x2E6FB0) + public static let workText = Color(korekoreRGB: 0x2E6FB0) /// The box's screen background in calm states. - static let boxGround = Color(korekoreRGB: 0x1C1730) + public static let boxGround = Color(korekoreRGB: 0x1C1730) /// Task tickets and the side panel on the box; agent rows on Ink. - static let boxCard = Color(korekoreRGB: 0x2A2345) + public static let boxCard = Color(korekoreRGB: 0x2A2345) /// Kore's screen-face; empty segments of meters on the box. - static let boxFace = Color(korekoreRGB: 0x3B2F63) + public static let boxFace = Color(korekoreRGB: 0x3B2F63) /// Primary text on the box. Also Kore's shell. - static let boxText = Color(korekoreRGB: 0xFFF3DD) + public static let boxText = Color(korekoreRGB: 0xFFF3DD) /// Project names, times, hints on the box. - static let boxTextMuted = Color(korekoreRGB: 0xA9A2C2) + public static let boxTextMuted = Color(korekoreRGB: 0xA9A2C2) /// Dimmed screen behind the box's MENU card. - static let boxDim = Color(korekoreRGB: 0x0F0C1C) + public static let boxDim = Color(korekoreRGB: 0x0F0C1C) /// The box's ground while there is no link. - static let boxGrayGround = Color(korekoreRGB: 0x2A2833) + public static let boxGrayGround = Color(korekoreRGB: 0x2A2833) /// Kore's outline pixels only (sprite palette). - static let koreOutline = Color(korekoreRGB: 0x2B2140) + public static let koreOutline = Color(korekoreRGB: 0x2B2140) /// Cheeks on Kore and every Character. - static let blush = Color(korekoreRGB: 0xFF9EB8) + public static let blush = Color(korekoreRGB: 0xFF9EB8) /// Kore's mouth pixels. - static let koreMouth = Color(korekoreRGB: 0xFFB3C8) + public static let koreMouth = Color(korekoreRGB: 0xFFB3C8) /// Claude Code tile. - static let agentCc = Color(korekoreRGB: 0xF2A27E) + public static let agentCc = Color(korekoreRGB: 0xF2A27E) /// Codex tile. - static let agentCx = Color(korekoreRGB: 0x9DB4FF) + public static let agentCx = Color(korekoreRGB: 0x9DB4FF) /// GitHub Actions tile; General and Advanced nav tiles. - static let agentCi = Color(korekoreRGB: 0xD9D3EA) + public static let agentCi = Color(korekoreRGB: 0xD9D3EA) /// OpenCode tile. - static let agentOc = Color(korekoreRGB: 0x8FE3C4) + public static let agentOc = Color(korekoreRGB: 0x8FE3C4) /// GitHub Copilot CLI tile. - static let agentGh = Color(korekoreRGB: 0xA8D8FF) + public static let agentGh = Color(korekoreRGB: 0xA8D8FF) /// Pi tile. - static let agentPi = Color(korekoreRGB: 0xFFC59E) + public static let agentPi = Color(korekoreRGB: 0xFFC59E) /// Your own events (POST /v1/events) tile; Conversation nav tile. - static let agentApi = Color(korekoreRGB: 0xFFE58A) + public static let agentApi = Color(korekoreRGB: 0xFFE58A) } /// The bundled fonts (Resources/fonts) by PostScript name. - enum FontName { - static let roundedRegular = "RoundedMplus1c-Regular" - static let roundedBold = "RoundedMplus1c-Bold" - static let roundedExtraBold = "RoundedMplus1c-ExtraBold" - static let pixelRegular = "DotGothic16-Regular" + public enum FontName { + public static let roundedRegular = "RoundedMplus1c-Regular" + public static let roundedBold = "RoundedMplus1c-Bold" + public static let roundedExtraBold = "RoundedMplus1c-ExtraBold" + public static let pixelRegular = "DotGothic16-Regular" } - enum Typography { + public enum Typography { /// Rounded Mplus 1c 800. The wordmark, large lockups only. - static let display = KorekoreTextStyle(font: "RoundedMplus1c-ExtraBold", size: 104, lineHeight: 93.6, letterSpacing: -3.12) + public static let display = KorekoreTextStyle(font: "RoundedMplus1c-ExtraBold", size: 104, lineHeight: 93.6, letterSpacing: -3.12) /// Rounded Mplus 1c 800. Page title in the app's content area. - static let title = KorekoreTextStyle(font: "RoundedMplus1c-ExtraBold", size: 28, lineHeight: 34, letterSpacing: 0) + public static let title = KorekoreTextStyle(font: "RoundedMplus1c-ExtraBold", size: 28, lineHeight: 34, letterSpacing: 0) /// Rounded Mplus 1c 800. Onboarding headlines. - static let hero = KorekoreTextStyle(font: "RoundedMplus1c-ExtraBold", size: 42, lineHeight: 47, letterSpacing: 0) + public static let hero = KorekoreTextStyle(font: "RoundedMplus1c-ExtraBold", size: 42, lineHeight: 47, letterSpacing: 0) /// Rounded Mplus 1c 800. Card titles, banner lines. - static let heading = KorekoreTextStyle(font: "RoundedMplus1c-ExtraBold", size: 17, lineHeight: 22, letterSpacing: 0) + public static let heading = KorekoreTextStyle(font: "RoundedMplus1c-ExtraBold", size: 17, lineHeight: 22, letterSpacing: 0) /// Rounded Mplus 1c 800. Row names, nav items, character names. - static let label = KorekoreTextStyle(font: "RoundedMplus1c-ExtraBold", size: 15, lineHeight: 20, letterSpacing: 0) + public static let label = KorekoreTextStyle(font: "RoundedMplus1c-ExtraBold", size: 15, lineHeight: 20, letterSpacing: 0) /// Rounded Mplus 1c 800. Buttons and chips (12 px in dense rows). - static let button = KorekoreTextStyle(font: "RoundedMplus1c-ExtraBold", size: 13, lineHeight: 18, letterSpacing: 0) + public static let button = KorekoreTextStyle(font: "RoundedMplus1c-ExtraBold", size: 13, lineHeight: 18, letterSpacing: 0) /// Rounded Mplus 1c 400. Paragraphs, chat bubbles. - static let body = KorekoreTextStyle(font: "RoundedMplus1c-Regular", size: 14, lineHeight: 21, letterSpacing: 0) + public static let body = KorekoreTextStyle(font: "RoundedMplus1c-Regular", size: 14, lineHeight: 21, letterSpacing: 0) /// Rounded Mplus 1c 400. Row details, captions. - static let small = KorekoreTextStyle(font: "RoundedMplus1c-Regular", size: 12, lineHeight: 17, letterSpacing: 0) + public static let small = KorekoreTextStyle(font: "RoundedMplus1c-Regular", size: 12, lineHeight: 17, letterSpacing: 0) /// DotGothic16 400. The state word on the box (22-36 px on a takeover). - static let boxState = KorekoreTextStyle(font: "DotGothic16-Regular", size: 24, lineHeight: 24, letterSpacing: 0) + public static let boxState = KorekoreTextStyle(font: "DotGothic16-Regular", size: 24, lineHeight: 24, letterSpacing: 0) /// DotGothic16 400. Ticket titles on the box (9-12 px). - static let boxText = KorekoreTextStyle(font: "DotGothic16-Regular", size: 11, lineHeight: 14, letterSpacing: 0) + public static let boxText = KorekoreTextStyle(font: "DotGothic16-Regular", size: 11, lineHeight: 14, letterSpacing: 0) /// DotGothic16 400. Values, versions, ports in the app. - static let pixelValue = KorekoreTextStyle(font: "DotGothic16-Regular", size: 13, lineHeight: 18, letterSpacing: 0) + public static let pixelValue = KorekoreTextStyle(font: "DotGothic16-Regular", size: 13, lineHeight: 18, letterSpacing: 0) /// DotGothic16 400. State tags in the app: uppercase, state *-text colour, no background. - static let pixelTag = KorekoreTextStyle(font: "DotGothic16-Regular", size: 12, lineHeight: 16, letterSpacing: 0) + public static let pixelTag = KorekoreTextStyle(font: "DotGothic16-Regular", size: 12, lineHeight: 16, letterSpacing: 0) } - enum Space { + public enum Space { /// Inside pills, icon-to-text in pixel rows. - static let s1: CGFloat = 4 + public static let s1: CGFloat = 4 /// Gaps in button rows, between tickets on the box (px x 1.5 there). - static let s2: CGFloat = 8 + public static let s2: CGFloat = 8 /// Row padding, card grid gaps. - static let s3: CGFloat = 12 + public static let s3: CGFloat = 12 /// Card padding, content-area gaps. - static let s4: CGFloat = 16 + public static let s4: CGFloat = 16 /// Window inset, page padding. - static let s5: CGFloat = 24 + public static let s5: CGFloat = 24 /// Onboarding columns, board margins. - static let s6: CGFloat = 40 + public static let s6: CGFloat = 40 } - enum Radius { + public enum Radius { /// Key chips (K0 K1 K2) and state pills on the box; pixel tags. - static let pixel: CGFloat = 4 + public static let pixel: CGFloat = 4 /// Inner tiles: sprite stages, inputs, ticket rows on the box (8 px at 1x). - static let sm: CGFloat = 10 + public static let sm: CGFloat = 10 /// Cards and grouped lists. - static let md: CGFloat = 16 + public static let md: CGFloat = 16 /// Windows and panels. - static let lg: CGFloat = 20 + public static let lg: CGFloat = 20 /// Hero panels (onboarding Kore stage). - static let xl: CGFloat = 28 + public static let xl: CGFloat = 28 /// Buttons, chips, toggles, tabs. - static let pill: CGFloat = 999 + public static let pill: CGFloat = 999 } - enum Stroke { + public enum Stroke { /// Pixel-tag outlines on the box and status squares. - static let thin: CGFloat = 1.5 + public static let thin: CGFloat = 1.5 /// Cards, buttons, toggles, inputs, chips. - static let base: CGFloat = 2 + public static let base: CGFloat = 2 /// Windows, the selected character card (kore-pink), primary hero buttons. - static let bold: CGFloat = 3 + public static let bold: CGFloat = 3 } /// Solid ink drop shadows: how far down they fall. - enum Sticker { + public enum Sticker { /// Cards, list groups, the sidebar box mirror. Solid ink, no blur: the sticker look. - static let sm: CGFloat = 4 + public static let sm: CGFloat = 4 /// Hero panels, lockup cards, the menu bar panel. - static let md: CGFloat = 6 + public static let md: CGFloat = 6 /// App windows. - static let lg: CGFloat = 8 + public static let lg: CGFloat = 8 } - enum Pixel { + public enum Pixel { /// Small bitmap tag (sidebar, title bar), solid, no grain. - static let dotSm: CGFloat = 2 + public static let dotSm: CGFloat = 2 /// Medium tag on Ink lockups. - static let dotMd: CGFloat = 3 + public static let dotMd: CGFloat = 3 /// Large tag: 3 px dot + 1 px grain gap, 1 px corner. - static let dotLg: CGFloat = 4 + public static let dotLg: CGFloat = 4 /// Kore and Characters in app cards: 1 sprite pixel = 4 px. - static let spriteScaleApp: Int = 4 + public static let spriteScaleApp: Int = 4 /// Kore on the 320x240 box screen in takeovers (4 on duty). - static let spriteScaleBox: Int = 5 + public static let spriteScaleBox: Int = 5 } } /// A type style: the font file, its size, line height and letter spacing, all in points. -struct KorekoreTextStyle { - let font: String - let size: CGFloat - let lineHeight: CGFloat - let letterSpacing: CGFloat +public struct KorekoreTextStyle: Sendable { + public let font: String + public let size: CGFloat + public let lineHeight: CGFloat + public let letterSpacing: CGFloat } extension Color { - init(korekoreRGB rgb: UInt32) { + public init(korekoreRGB rgb: UInt32) { self.init(.sRGB, red: Double(rgb >> 16 & 0xFF) / 255, green: Double(rgb >> 8 & 0xFF) / 255, blue: Double(rgb & 0xFF) / 255) } } diff --git a/app/Sources/KorekoreUI/MenuPanel.swift b/app/Sources/KorekoreUI/MenuPanel.swift new file mode 100644 index 00000000..258507d7 --- /dev/null +++ b/app/Sources/KorekoreUI/MenuPanel.swift @@ -0,0 +1,200 @@ +import AppKit +import SwiftUI +import VibeBuddyCore + +/// What the menu bar panel's rows do; the app fills these in. +public struct KorekoreMenuActions { + public var settings: () -> Void + public var checkForUpdates: () -> Void + public var reportProblem: () -> Void + public var quit: () -> Void + /// The daemon isn't answering: start it again. + public var restartDaemon: () -> Void + + public init(settings: @escaping () -> Void, checkForUpdates: @escaping () -> Void, reportProblem: @escaping () -> Void, + quit: @escaping () -> Void, restartDaemon: @escaping () -> Void) { + self.settings = settings + self.checkForUpdates = checkForUpdates + self.reportProblem = reportProblem + self.quit = quit + self.restartDaemon = restartDaemon + } +} + +/// The panel the menu bar item opens (canvas: "Mac · Menu bar"), 360 px wide. +public struct KorekoreMenuPanel: View { + let picture: BoxPicture + let actions: KorekoreMenuActions + @State private var hovered: Int? + + public init(picture: BoxPicture, actions: KorekoreMenuActions) { + self.picture = picture + self.actions = actions + } + + public static let width: CGFloat = 360 + + public var body: some View { + VStack(alignment: .leading, spacing: 12) { + HStack(alignment: .bottom, spacing: 8) { + Text(verbatim: "korekore").font(.rounded(18)) + PixelTag() + } + strip + modes + stats + items + } + .foregroundStyle(Theme.Colors.ink) + .padding(14) + .frame(width: Self.width - 2 * Theme.Stroke.bold, alignment: .leading) + .sticker(radius: 18, fill: Theme.Colors.cream, stroke: Theme.Stroke.bold, shadow: Theme.Sticker.md) + .padding(.bottom, Theme.Sticker.md) + } + + /// The box at a glance, on Ink like the box itself. Without the daemon it offers to start it again. + private var strip: some View { + let mood = picture.mood + return HStack(spacing: 12) { + Sprite(name: mood.expression, scale: 3, gray: mood == .noLink) + VStack(alignment: .leading, spacing: 3) { + stripTitle.font(.pixel(16)).foregroundStyle(mood.color) + stripDetail.font(.pixel(12)).foregroundStyle(Theme.Colors.boxTextMuted) + } + Spacer(minLength: 0) + } + .padding(10) + .background(Theme.Colors.ink, in: RoundedRectangle(cornerRadius: 12)) + .contentShape(Rectangle()) + .onTapGesture { if !picture.daemonAlive { actions.restartDaemon() } } + } + + @ViewBuilder private var stripTitle: some View { + let word = picture.mood.word + switch picture.mood { + case .working, .input: + if picture.activityCount == 1 { + Text(verbatim: "\(word) · ") + Text("1 AGENT") + } else { + Text(verbatim: "\(word) · ") + Text("\(picture.activityCount) AGENTS") + } + default: + Text(verbatim: word) + } + } + + @ViewBuilder private var stripDetail: some View { + if !picture.daemonAlive { + Text("daemon not responding · click to restart") + } else if let link = picture.link { + if let firmware = picture.firmwareVersion { + Text("box online · \(link.rawValue) · fw \(firmware)") + } else { + Text("box online · \(link.rawValue)") + } + } else { + Text("no box linked") + } + } + + /// The box's mode, as chips; the box changes it (K0), so here they only show it. + private var modes: some View { + HStack(spacing: 6) { + // Without a link the last mode heard may be stale, so none is lit. + chip(String(localized: "On duty"), on: picture.link != nil && picture.mode == "duty") + chip(String(localized: "Pomodoro"), on: picture.link != nil && picture.mode == "pomodoro") + chip(String(localized: "Leisure"), on: picture.link != nil && picture.mode == "leisure") + } + } + + private func chip(_ label: String, on: Bool) -> some View { + Text(verbatim: label) + .font(.rounded(12)) + .padding(.vertical, 3) + .padding(.horizontal, 10) + .foregroundStyle(on ? Theme.Colors.cream : Theme.Colors.ink) + .background(on ? Theme.Colors.ink : Theme.Colors.paper, in: Capsule()) + .overlay(Capsule().strokeBorder(Theme.Colors.ink, lineWidth: Theme.Stroke.base)) + } + + private var stats: some View { + HStack(spacing: 8) { + stat(Text("\(Text(verbatim: "\(picture.today.done)").foregroundColor(Theme.Colors.doneText)) done")) + stat(Text("\(Text(verbatim: "\(picture.today.asks)").foregroundColor(Theme.Colors.waitText)) asks")) + stat(Text("\(Text(verbatim: BoxPicture.busy(picture.today.busySeconds)).foregroundColor(Theme.Colors.workText)) busy")) + } + .font(.pixel(13)) + } + + private func stat(_ label: Text) -> some View { + label + .lineLimit(1) + .padding(6) + .frame(maxWidth: .infinity) + .background(Theme.Colors.paper, in: RoundedRectangle(cornerRadius: 10)) + .overlay(RoundedRectangle(cornerRadius: 10).strokeBorder(Theme.Colors.ink, lineWidth: Theme.Stroke.base)) + } + + private var items: some View { + VStack(spacing: 0) { + item(0, String(localized: "Settings…"), key: "⌘,", action: actions.settings) + item(1, String(localized: "Check for updates…"), action: actions.checkForUpdates) + item(2, String(localized: "Report a problem…"), action: actions.reportProblem) + item(3, String(localized: "Quit korekore (the box goes offline)"), key: "⌘Q", action: actions.quit) + } + .padding(.top, 6) + .overlay(alignment: .top) { Rectangle().fill(Theme.Colors.line).frame(height: Theme.Stroke.base) } + } + + private func item(_ index: Int, _ label: String, key: String = "", action: @escaping () -> Void) -> some View { + Button(action: action) { + HStack { + Text(verbatim: label).font(.rounded(14, weight: 700)) + Spacer() + Text(verbatim: key).font(.pixel(12)).foregroundStyle(Theme.Colors.muted2) + } + .padding(.vertical, 7) + .padding(.horizontal, 8) + .background(hovered == index ? Theme.Colors.paper : .clear, in: RoundedRectangle(cornerRadius: 10)) + .contentShape(Rectangle()) + } + .buttonStyle(.plain) + .onHover { hovered = $0 ? index : (hovered == index ? nil : hovered) } + } +} + +/// The menu bar item: Kore at 1×, in colour online, with a `sun` dot when an agent needs you, gray and asleep +/// without a link (canvas: "Mac · Menu bar", bottom row). +public enum KorekoreMenuIcon { + public static func image(for picture: BoxPicture) -> NSImage { + let mood = picture.mood + let needsYou = picture.tickets.contains(where: \.needsInput) + let awake = KorekoreSprites.all[needsYou ? "kore-input" : "kore-normal"]! + let kore = mood == .noLink ? KorekoreSprites.koreSleep.grayed(brightness: 0.75) : awake + // Two image pixels per point, so each of Kore's pixels is one point, sharp on Retina. + let pixels = kore.rgba(scale: 2) + let dot: CGFloat = needsYou ? 7 + 4 : 0 + let size = NSSize(width: CGFloat(kore.width) + dot, height: CGFloat(kore.height)) + let image = NSImage(size: size, flipped: false) { _ in + guard let context = NSGraphicsContext.current?.cgContext, + let provider = CGDataProvider(data: Data(pixels) as CFData), + let sprite = CGImage(width: kore.width * 2, height: kore.height * 2, bitsPerComponent: 8, bitsPerPixel: 32, + bytesPerRow: kore.width * 8, space: CGColorSpace(name: CGColorSpace.sRGB)!, + bitmapInfo: CGBitmapInfo(rawValue: CGImageAlphaInfo.last.rawValue), provider: provider, + decode: nil, shouldInterpolate: false, intent: .defaultIntent) + else { return false } + context.interpolationQuality = .none + context.draw(sprite, in: CGRect(x: 0, y: 0, width: kore.width, height: kore.height)) + if needsYou { + let rect = CGRect(x: CGFloat(kore.width) + 4 + 0.75, y: (CGFloat(kore.height) - 7) / 2 + 0.75, width: 5.5, height: 5.5) + context.setFillColor(NSColor(Theme.Colors.sun).cgColor) + context.fillEllipse(in: rect) + context.setStrokeColor(NSColor(Theme.Colors.ink).cgColor) + context.setLineWidth(1.5) + context.strokeEllipse(in: rect) + } + return true + } + return image + } +} diff --git a/app/Sources/KorekoreUI/MiniBox.swift b/app/Sources/KorekoreUI/MiniBox.swift new file mode 100644 index 00000000..8ae3e4be --- /dev/null +++ b/app/Sources/KorekoreUI/MiniBox.swift @@ -0,0 +1,88 @@ +import SwiftUI +import VibeBuddyCore + +/// The box's screen redrawn at the head of the sidebar (canvas: "App sidebar component"): laid out at the box's +/// 320 × 240 and shown at 0.65, 208 × 156, as the design does. +public struct MiniBox: View { + let picture: BoxPicture + + public init(picture: BoxPicture) { + self.picture = picture + } + + static let scale: CGFloat = 0.65 + + public var body: some View { + screen + .scaleEffect(Self.scale, anchor: .topLeading) + .frame(width: 320 * Self.scale, height: 240 * Self.scale, alignment: .topLeading) + // The outline sits outside the screen, as the canvas's content-box does. + .clipShape(RoundedRectangle(cornerRadius: Theme.Radius.md - Theme.Stroke.bold, style: .continuous)) + .padding(Theme.Stroke.bold) + .sticker(radius: Theme.Radius.md, fill: Theme.Colors.ink, stroke: Theme.Stroke.bold) + } + + @ViewBuilder private var screen: some View { + if picture.mood == .noLink { + asleep + } else { + onDuty + } + } + + /// No link: the whole screen gray, Kore asleep and grayed at scale 6 (README, "No link"). + private var asleep: some View { + VStack(spacing: 6) { + Text(verbatim: "Z z").font(.pixel(14)).foregroundStyle(Theme.Colors.mist) + Sprite(name: "kore-sleep", scale: 6, gray: true) + Text(verbatim: "NO LINK").font(.korekore(Theme.Typography.boxState)).foregroundStyle(Theme.Colors.mist) + Text(verbatim: "waiting for the Mac").font(.pixel(11)).foregroundStyle(Theme.Colors.mistText) + } + .frame(width: 320, height: 240) + .background(Theme.Colors.boxGrayGround) + } + + private var onDuty: some View { + let mood = picture.mood + return HStack(spacing: 0) { + VStack(spacing: 8) { + Sprite(name: mood.expression, scale: 4) + Text(verbatim: mood.word).font(.pixel(16)).foregroundStyle(mood.color) + } + .frame(width: 96, height: 240) + .background(Theme.Colors.boxCard) + VStack(alignment: .leading, spacing: 8) { + if picture.tickets.isEmpty { + quiet + } else { + ForEach(Array(picture.tickets.enumerated()), id: \.offset) { _, ticket in + HStack(spacing: 8) { + Sprite(name: "icon-\(ticket.icon)", scale: 2) + Text(verbatim: ticket.title).font(.pixel(13)).lineLimit(1) + Spacer(minLength: 0) + } + .padding(7) + .background(Theme.Colors.boxCard, in: RoundedRectangle(cornerRadius: 8)) + } + Spacer(minLength: 0) + } + } + .padding(.vertical, 10) + .padding(.horizontal, 8) + } + .foregroundStyle(Theme.Colors.boxText) + .frame(width: 320, height: 240) + .background(Theme.Colors.boxGround) + } + + /// No cards: the box's ALL QUIET with today's numbers. + private var quiet: some View { + VStack(spacing: 6) { + Text(verbatim: "ALL QUIET").font(.pixel(12)) + Text(verbatim: "\(picture.today.done) done · \(picture.today.asks) asks · \(BoxPicture.busy(picture.today.busySeconds).uppercased()) busy") + .font(.pixel(10)) + .foregroundStyle(Theme.Colors.boxTextMuted) + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + } +} diff --git a/app/Sources/KorekoreUI/Settings.swift b/app/Sources/KorekoreUI/Settings.swift new file mode 100644 index 00000000..963d6253 --- /dev/null +++ b/app/Sources/KorekoreUI/Settings.swift @@ -0,0 +1,206 @@ +import SwiftUI +import VibeBuddyCore + +/// The settings window's sections, in the sidebar's order (docs/design/korekore/README.md). +public enum KorekoreSection: String, CaseIterable, Identifiable, Sendable { + case character, agents, conversation, device, general, advanced + + public var id: String { rawValue } + + var title: String { + switch self { + case .character: String(localized: "Character") + case .agents: String(localized: "Agents") + case .conversation: String(localized: "Conversation") + case .device: String(localized: "Device") + case .general: String(localized: "General") + case .advanced: String(localized: "Advanced") + } + } + + var subtitle: String { + switch self { + case .character: String(localized: "Who lives in the box") + case .agents: String(localized: "Who the box watches") + case .conversation: String(localized: "Hold K0 on the box and ask") + case .device: String(localized: "The box, its firmware and its network") + case .general: String(localized: "How korekore behaves on this Mac") + case .advanced: String(localized: "For when something's off") + } + } + + var tile: String { + switch self { + case .character: "icon-nav-char" + case .agents: "icon-nav-agents" + case .conversation: "icon-nav-chat" + case .device: "icon-nav-box" + case .general: "icon-nav-gen" + case .advanced: "icon-nav-adv" + } + } +} + +/// Versions for the foot of the sidebar. +public struct KorekoreVersions: Equatable, Sendable { + public var app: String + public var firmware: String? + + public init(app: String, firmware: String?) { + self.app = app + self.firmware = firmware + } +} + +/// The left side of the settings window (canvas: "App sidebar component"). +struct KorekoreSidebar: View { + let picture: BoxPicture + let versions: KorekoreVersions + let sections: [KorekoreSection] + @Binding var selection: KorekoreSection + + /// The real window buttons sit here; the window moves them into this row. + static let windowButtonsRow: CGFloat = 12 + + var body: some View { + VStack(alignment: .leading, spacing: 14) { + Color.clear.frame(height: Self.windowButtonsRow) + VStack(alignment: .leading, spacing: 2) { + Text(verbatim: "korekore").font(.rounded(26)).tracking(-0.52).foregroundStyle(Theme.Colors.ink) + PixelTag().padding(.top, 4) + } + .padding(.horizontal, 2) + MiniBox(picture: picture).frame(maxWidth: .infinity) + status + VStack(spacing: 4) { + ForEach(sections) { section in + row(section) + } + } + Spacer(minLength: 0) + footer + } + .padding(EdgeInsets(top: 14, leading: 14, bottom: 16, trailing: 14)) + .frame(width: 240 - Theme.Stroke.bold, alignment: .leading) + .frame(maxHeight: .infinity) + .background(Theme.Colors.paper) + .overlay(alignment: .trailing) { + Rectangle().fill(Theme.Colors.ink).frame(width: Theme.Stroke.bold).offset(x: Theme.Stroke.bold) + } + .padding(.trailing, Theme.Stroke.bold) + } + + private var status: some View { + VStack(alignment: .leading, spacing: 2) { + HStack(spacing: 6) { + Rectangle() + .fill(picture.link == nil ? Theme.Colors.mist : Theme.Colors.mint) + .frame(width: 8, height: 8) + .overlay(Rectangle().strokeBorder(Theme.Colors.ink, lineWidth: Theme.Stroke.thin)) + linkLine + } + .foregroundStyle(Theme.Colors.ink) + Text("\(picture.today.done) done · \(picture.today.asks) asks today").foregroundStyle(Theme.Colors.muted) + } + .font(.pixel(12)) + .padding(.horizontal, 4) + } + + @ViewBuilder private var linkLine: some View { + if !picture.daemonAlive { + Text("DAEMON NOT RUNNING") + } else if let link = picture.link { + Text("BOX ONLINE · \(link.rawValue)") + } else { + Text("NO BOX LINKED") + } + } + + private func row(_ section: KorekoreSection) -> some View { + let current = section == selection + return Button { + selection = section + } label: { + HStack(spacing: 10) { + Sprite(name: section.tile, scale: 2) + Text(verbatim: section.title).font(.rounded(15)) + } + .padding(.vertical, 6) + .padding(.horizontal, 8) + .frame(maxWidth: .infinity, alignment: .leading) + .foregroundStyle(current ? Theme.Colors.cream : Theme.Colors.ink) + .background(current ? Theme.Colors.ink : .clear, in: RoundedRectangle(cornerRadius: 12)) + .contentShape(Rectangle()) + } + .buttonStyle(.plain) + .accessibilityAddTraits(current ? .isSelected : []) + } + + private var footer: some View { + Group { + if let firmware = versions.firmware { + Text("app \(versions.app) · box fw \(firmware)") + } else { + Text("app \(versions.app)") + } + } + .font(.pixel(12)) + .foregroundStyle(Theme.Colors.muted2) + .padding(.horizontal, 4) + } +} + +/// The whole settings window (canvas: "Mac · Character (sidebar)" and its siblings): cream, a 3 px ink outline, +/// radius 20 and the large sticker shadow, with the sidebar on the left and the section's page on the right. +public struct KorekoreSettings: View { + let picture: BoxPicture + let versions: KorekoreVersions + let sections: [KorekoreSection] + @Binding var selection: KorekoreSection + let page: (KorekoreSection) -> Page + + public init(picture: BoxPicture, versions: KorekoreVersions, sections: [KorekoreSection], + selection: Binding, @ViewBuilder page: @escaping (KorekoreSection) -> Page) { + self.picture = picture + self.versions = versions + self.sections = sections + _selection = selection + self.page = page + } + + /// Room below the window's outline for its shadow. + public static var shadow: CGFloat { Theme.Sticker.lg } + + public var body: some View { + HStack(spacing: 0) { + KorekoreSidebar(picture: picture, versions: versions, sections: sections, selection: $selection) + VStack(alignment: .leading, spacing: 14) { + HStack(alignment: .firstTextBaseline) { + Text(verbatim: selection.title).font(.korekore(Theme.Typography.title)) + Spacer() + Text(verbatim: selection.subtitle).font(.rounded(13, weight: 400)).foregroundStyle(Theme.Colors.muted) + } + page(selection) + Spacer(minLength: 0) + } + .foregroundStyle(Theme.Colors.ink) + .padding(EdgeInsets(top: 22, leading: 22, bottom: 20, trailing: 22)) + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading) + } + .sticker(radius: Theme.Radius.lg, fill: Theme.Colors.cream, stroke: Theme.Stroke.bold, shadow: Self.shadow) + .padding(.bottom, Self.shadow) + } +} + +/// Stands in for a page that comes with a later step of the korekore UI. +public struct KorekorePagePending: View { + public init() {} + + public var body: some View { + Text("This page comes with the next step of korekore.") + .font(.rounded(14, weight: 400)) + .foregroundStyle(Theme.Colors.muted) + .frame(maxWidth: .infinity, minHeight: 120) + .overlay(RoundedRectangle(cornerRadius: Theme.Radius.md).strokeBorder(Theme.Colors.ink, style: StrokeStyle(lineWidth: Theme.Stroke.base, dash: [6, 4]))) + } +} diff --git a/app/Sources/KorekoreUI/SettingsWindow.swift b/app/Sources/KorekoreUI/SettingsWindow.swift new file mode 100644 index 00000000..575b7ea1 --- /dev/null +++ b/app/Sources/KorekoreUI/SettingsWindow.swift @@ -0,0 +1,57 @@ +import AppKit +import SwiftUI + +/// The korekore settings window: no system frame, so the view draws the design's own (cream, 3 px ink outline, +/// radius 20, solid shadow); the real window buttons move into the sidebar's top row. +public final class KorekoreSettingsWindow: NSWindow { + /// Where the design puts the first button: the sidebar's padding inside the window's outline. + private static let buttonsInset = NSPoint(x: 17, y: 17) + private var resizeObserver: Any? + + public init(rootView: Root) { + super.init(contentRect: NSRect(x: 0, y: 0, width: 960, height: 772 + KorekoreSettings.shadow), + styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView], + backing: .buffered, defer: false) + title = "korekore" + titleVisibility = .hidden + titlebarAppearsTransparent = true + isOpaque = false + backgroundColor = .clear + // The design's shadow is drawn by the view; the system's would trace the transparent corners. + hasShadow = false + isMovableByWindowBackground = true + let hosting = NSHostingView(rootView: rootView.frame(minWidth: 900, minHeight: 760 + KorekoreSettings.shadow) + .ignoresSafeArea()) + hosting.sizingOptions = [.minSize] + // The view runs up under the (invisible) title bar: the design's window has none. + hosting.safeAreaRegions = [] + contentView = hosting + resizeObserver = NotificationCenter.default.addObserver(forName: NSWindow.didResizeNotification, object: self, queue: .main) { [weak self] _ in + MainActor.assumeIsolated { self?.placeButtons() } + } + placeButtons() + } + + override public func layoutIfNeeded() { + super.layoutIfNeeded() + placeButtons() + } + + /// AppKit lays the buttons out again on resize and on key changes, so this runs after each. + private func placeButtons() { + let buttons = [NSWindow.ButtonType.closeButton, .miniaturizeButton, .zoomButton].compactMap { standardWindowButton($0) } + guard let container = buttons.first?.superview?.superview else { return } + // The title bar is only 28 pt tall; make room for the design's row, 17 pt in from the outline. + let height = Self.buttonsInset.y * 2 + (buttons.first?.frame.height ?? 14) + if container.frame.height != height { + container.frame = NSRect(x: 0, y: frame.height - height, width: frame.width, height: height) + } + for (index, button) in buttons.enumerated() { + let superview = button.superview! + superview.frame = container.bounds + button.setFrameOrigin(NSPoint(x: Self.buttonsInset.x + CGFloat(index) * (button.frame.width + 6), + y: superview.bounds.height - Self.buttonsInset.y - button.frame.height)) + } + } +} + diff --git a/app/Sources/SelfTest/main.swift b/app/Sources/SelfTest/main.swift index ee04b124..e9740488 100644 --- a/app/Sources/SelfTest/main.swift +++ b/app/Sources/SelfTest/main.swift @@ -353,6 +353,30 @@ do { check(KorekoreSprites.all.values.allSatisfy { s in s.pixels.count == s.width * s.height && s.pixels.allSatisfy { Int($0) <= s.palette.count } }, "every sprite is whole") } +// 8. korekore's picture of the box (ADR-0021), drawn from the status's Activities. +do { + let json = #""" + {"daemon":{"build":"x"},"device":{"connected":true,"bridge":false,"mode":"duty","network":true}, + "today":{"done":7,"asks":3,"busy_seconds":15120},"hooks":{},"config":{"notify_link":true}, + "activities":[{"agent":"codex","title":"CX:Review changes","project":"vibebuddy","state":"needs_input","host":"app","state_for_s":3,"last_event_s":3}, + {"agent":"claude-code","title":"CC:Add Chinese","state":"working","host":"none","state_for_s":9,"last_event_s":9}, + {"agent":"github-actions","title":"CI:App tests","state":"working","host":"github","state_for_s":1,"last_event_s":1}, + {"agent":"pi","title":"PI:Older","state":"working","host":"none","state_for_s":1,"last_event_s":1}]} + """# + let status = try StatusCoding.decoder().decode(Status.self, from: Data(json.utf8)) + check(status.activities?.count == 4, "activities decode") + let picture = BoxPicture.derive(status: status, daemonAlive: true) + check(picture.mood == .input && picture.link == .lan, "an Activity waiting on you makes the box ask; linked over the network") + check(picture.tickets.map(\.icon) == ["cx", "cc", "ci"] && picture.tickets.first?.title == "Review changes", "the newest three, by tile, without prefix") + check(BoxPicture.derive(status: status, daemonAlive: false).mood == .noLink, "no daemon, no link") + check(BoxPicture.cardTitle("Fix: the build") == "Fix: the build", "only a short capital prefix is dropped") + check(BoxPicture.busy(15120) == "4h12m" && BoxPicture.busy(2100) == "35m", "busy time reads 4h12m") + let old = try StatusCoding.decoder().decode(Status.self, from: Data(sample.utf8)) + check(old.activities == nil && BoxPicture.derive(status: old, daemonAlive: true).mood == .pomodoro, "an older daemon without activities still decodes; its box is in a Pomodoro") +} catch { + check(false, "korekore status fails to decode: \(error)") +} + if failures > 0 { print("\(failures) failure(s)") exit(1) diff --git a/app/Sources/VibeBuddy/AppDelegate.swift b/app/Sources/VibeBuddy/AppDelegate.swift index d8352059..da191b9b 100644 --- a/app/Sources/VibeBuddy/AppDelegate.swift +++ b/app/Sources/VibeBuddy/AppDelegate.swift @@ -1,5 +1,6 @@ import AppKit import Combine +import KorekoreUI import SwiftUI import VibeBuddyCore @@ -7,6 +8,8 @@ import VibeBuddyCore final class AppDelegate: NSObject, NSApplicationDelegate { private let model = AppModel() private var statusItem: NSStatusItem! + /// The korekore UI's menu bar item and panel, in place of `statusItem` (ADR-0021). + private var korekoreItem: KorekoreStatusItem? private var settingsWindow: NSWindow? private var onboardingWindow: NSWindow? private var subscriptions: Set = [] @@ -20,7 +23,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate { // An installed copy with the old file name renames itself (or gives way to a new copy) and starts again. if BundleRename.migrateIfNeeded() { exit(0) } // The korekore UI's fonts, only when it was asked for (ADR-0021): the current UI keeps the system's. - if AppUI.atLaunch() == .korekore { KorekoreAssets.registerFonts() } + if AppUI.atLaunch() == .korekore { KorekoreAssets.registerFonts(in: Resources.resourcesDirectory.appendingPathComponent("fonts")) } DistributedNotificationCenter.default().addObserver(forName: SingleInstance.showSettings, object: nil, queue: .main) { [weak self] _ in MainActor.assumeIsolated { self?.showMainWindow() } } @@ -34,10 +37,17 @@ final class AppDelegate: NSObject, NSApplicationDelegate { source.resume() terminationSignal = source - statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.squareLength) - statusItem.button?.image = PixelFace.image(eyesClosed: true) - statusItem.menu = NSMenu() - model.$menu.receive(on: RunLoop.main).sink { [weak self] menu in self?.render(menu) }.store(in: &subscriptions) + if AppUI.atLaunch() == .korekore { + korekoreItem = KorekoreStatusItem(model: model, actions: KorekoreMenuActions( + settings: { [weak self] in self?.showSettings() }, checkForUpdates: { [weak self] in self?.checkForUpdates() }, + reportProblem: { [weak self] in self?.reportProblem() }, quit: { [weak self] in self?.quit() }, + restartDaemon: { [weak self] in self?.restartDaemon() })) + } else { + statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.squareLength) + statusItem.button?.image = PixelFace.image(eyesClosed: true) + statusItem.menu = NSMenu() + model.$menu.receive(on: RunLoop.main).sink { [weak self] menu in self?.render(menu) }.store(in: &subscriptions) + } model.$lastError.receive(on: RunLoop.main).compactMap { $0 }.sink { message in let alert = NSAlert() alert.messageText = "VibeBuddy" @@ -159,6 +169,13 @@ final class AppDelegate: NSObject, NSApplicationDelegate { @objc private func reportProblem() { model.reportProblem() } @objc func showSettings() { + if settingsWindow == nil, AppUI.atLaunch() == .korekore { + let window = KorekoreSettingsWindow(rootView: KorekoreSettingsRoot(model: model)) + window.center() + window.isReleasedWhenClosed = false + watchClose(window) + settingsWindow = window + } if settingsWindow == nil { // Roomy enough for the whole Character tab at first sight, and resizable down to the old size. let window = NSWindow(contentRect: NSRect(x: 0, y: 0, width: 760, height: 640), styleMask: [.titled, .closable, .miniaturizable, .resizable], backing: .buffered, defer: false) diff --git a/app/Sources/VibeBuddy/Korekore/KorekoreWindows.swift b/app/Sources/VibeBuddy/Korekore/KorekoreWindows.swift new file mode 100644 index 00000000..c5b2d623 --- /dev/null +++ b/app/Sources/VibeBuddy/Korekore/KorekoreWindows.swift @@ -0,0 +1,91 @@ +import AppKit +import Combine +import KorekoreUI +import SwiftUI +import VibeBuddyCore + +/// The settings window with the AppModel behind it. +struct KorekoreSettingsRoot: View { + @ObservedObject var model: AppModel + @State private var selection = KorekoreSection.character + + var body: some View { + // Voice commands are experimental: no Conversation section while the daemon has them off. + let sections = KorekoreSection.allCases.filter { $0 != .conversation || model.residentEnabled } + KorekoreSettings(picture: BoxPicture.derive(status: model.status, daemonAlive: model.daemonAlive), + versions: KorekoreVersions(app: Resources.bundleVersion, firmware: model.status?.device.firmwareVersion), + sections: sections, selection: $selection) { _ in + KorekorePagePending() + } + } +} + +/// The menu bar item and the panel it opens (canvas: "Mac · Menu bar"); the same `AppModel` feeds both. +@MainActor +final class KorekoreStatusItem { + private let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength) + private let model: AppModel + private let actions: KorekoreMenuActions + private var panel: NSPanel? + private var outsideClicks: Any? + private var subscriptions: Set = [] + + init(model: AppModel, actions: KorekoreMenuActions) { + self.model = model + self.actions = actions + statusItem.button?.target = self + statusItem.button?.action = #selector(toggle) + model.$status.combineLatest(model.$daemonAlive).receive(on: RunLoop.main).sink { [weak self] status, alive in + self?.statusItem.button?.image = KorekoreMenuIcon.image(for: BoxPicture.derive(status: status, daemonAlive: alive)) + }.store(in: &subscriptions) + } + + @objc private func toggle() { + if panel != nil { close() } else { open() } + } + + private func open() { + guard let button = statusItem.button, let buttonWindow = button.window else { return } + let close = { [weak self] (action: @escaping () -> Void) in { self?.close(); action() } } + let actions = KorekoreMenuActions(settings: close(actions.settings), checkForUpdates: close(actions.checkForUpdates), + reportProblem: close(actions.reportProblem), quit: actions.quit, + restartDaemon: close(actions.restartDaemon)) + let hosting = NSHostingView(rootView: KorekorePanelRoot(model: model, actions: actions)) + let size = hosting.fittingSize + let anchor = buttonWindow.convertToScreen(button.convert(button.bounds, to: nil)) + let screen = buttonWindow.screen?.visibleFrame ?? .zero + // Right edge under the item, kept on screen, 6 pt below the menu bar. + let x = min(anchor.maxX - size.width + 24, screen.maxX - size.width - 8) + let panel = NSPanel(contentRect: NSRect(x: x, y: anchor.minY - 6 - size.height, width: size.width, height: size.height), + styleMask: [.borderless, .nonactivatingPanel], backing: .buffered, defer: false) + panel.isOpaque = false + panel.backgroundColor = .clear + panel.hasShadow = false + panel.level = .popUpMenu + panel.contentView = hosting + panel.orderFrontRegardless() + self.panel = panel + statusItem.button?.highlight(true) + // Like a menu: a click anywhere else closes it. + outsideClicks = NSEvent.addGlobalMonitorForEvents(matching: [.leftMouseDown, .rightMouseDown]) { [weak self] _ in + MainActor.assumeIsolated { self?.close() } + } + } + + private func close() { + panel?.orderOut(nil) + panel = nil + statusItem.button?.highlight(false) + if let outsideClicks { NSEvent.removeMonitor(outsideClicks) } + outsideClicks = nil + } +} + +private struct KorekorePanelRoot: View { + @ObservedObject var model: AppModel + let actions: KorekoreMenuActions + + var body: some View { + KorekoreMenuPanel(picture: BoxPicture.derive(status: model.status, daemonAlive: model.daemonAlive), actions: actions) + } +} diff --git a/app/Sources/VibeBuddyCore/Korekore/BoxPicture.swift b/app/Sources/VibeBuddyCore/Korekore/BoxPicture.swift new file mode 100644 index 00000000..f005337d --- /dev/null +++ b/app/Sources/VibeBuddyCore/Korekore/BoxPicture.swift @@ -0,0 +1,90 @@ +import Foundation + +/// What the korekore UI shows of the box (ADR-0021): the mini box in the sidebar, the menu bar panel and its icon. +/// It is drawn from the daemon's status, not from a screen capture, so it costs nothing over the link. +/// desktop/src/korekore/picture.rs derives the same for Linux. +public struct BoxPicture: Equatable { + public enum Mood: Equatable, Sendable { + case ready, working, input, pomodoro, leisure, noLink + } + + public enum Link: String, Equatable, Sendable { + case usb = "USB", lan = "LAN", relay = "RELAY" + } + + /// A task card as the box shows it: the agent's tile and the title without its prefix. + public struct Ticket: Equatable, Sendable { + public var icon: String + public var title: String + public var needsInput: Bool + } + + public var mood: Mood + public var daemonAlive: Bool + /// How the box is linked; nil without a link. + public var link: Link? + /// `duty`, `pomodoro` or `leisure`, as the box last said. + public var mode: String? + /// The newest three, as the box's first page shows them. + public var tickets: [Ticket] + /// Every Activity the box is watching. + public var activityCount: Int + public var today: TodaySummary + public var firmwareVersion: String? + + /// The box can show this many cards on a page. + public static let ticketsShown = 3 + + public static func derive(status: Status?, daemonAlive: Bool) -> BoxPicture { + let activities = status?.activities ?? [] + let device = status?.device + let linked = daemonAlive && device?.connected == true + let link: Link? = !linked ? nil : device?.relay == true ? .relay : device?.network == true ? .lan : .usb + let mood: Mood + if !linked { + mood = .noLink + } else if device?.mode == "pomodoro" { + mood = .pomodoro + } else if device?.mode == "leisure" { + mood = .leisure + } else if activities.contains(where: { $0.state == "needs_input" }) { + mood = .input + } else if !activities.isEmpty { + mood = .working + } else { + mood = .ready + } + let tickets = activities.prefix(ticketsShown).map { + Ticket(icon: icon(forAgent: $0.agent), title: cardTitle($0.title), needsInput: $0.state == "needs_input") + } + return BoxPicture(mood: mood, daemonAlive: daemonAlive, link: link, mode: device?.mode, tickets: Array(tickets), + activityCount: activities.count, today: status?.today ?? TodaySummary(done: 0, asks: 0, busySeconds: 0), + firmwareVersion: device?.firmwareVersion) + } + + /// The agent's tile in docs/design/korekore/pixel/icons.json; anything else is the user's own events. + public static func icon(forAgent agent: String) -> String { + switch agent { + case "claude-code": "cc" + case "codex": "cx" + case "github-actions": "ci" + case "opencode": "oc" + case "copilot": "gh" + case "pi": "pi" + default: "api" + } + } + + /// The title without the prefix the daemon adds to tell agents apart (`CC:`, `CX:`…): the tile says that now. + public static func cardTitle(_ title: String) -> String { + guard let colon = title.firstIndex(of: ":"), title.distance(from: title.startIndex, to: colon) <= 3, + title[.. String { + let minutes = seconds / 60 + return minutes < 60 ? "\(minutes)m" : "\(minutes / 60)h\(String(format: "%02d", minutes % 60))m" + } +} diff --git a/app/Sources/VibeBuddyCore/Korekore/PixelSprite.swift b/app/Sources/VibeBuddyCore/Korekore/PixelSprite.swift index ff208390..7442d5ce 100644 --- a/app/Sources/VibeBuddyCore/Korekore/PixelSprite.swift +++ b/app/Sources/VibeBuddyCore/Korekore/PixelSprite.swift @@ -34,6 +34,17 @@ public struct PixelSprite: Sendable { } return bytes } + + /// The sprite in gray, as CSS `grayscale(1) brightness(b)` draws it: each colour's luminance (Rec. 709 + /// weights), scaled by `brightness`. The canvas grays Kore this way when the box has no link. + public func grayed(brightness: Double) -> PixelSprite { + let palette = palette.map { rgb -> UInt32 in + let (r, g, b) = (Double(rgb >> 16 & 0xFF), Double(rgb >> 8 & 0xFF), Double(rgb & 0xFF)) + let level = UInt32(min(255, max(0, ((0.2126 * r + 0.7152 * g + 0.0722 * b) * brightness).rounded()))) + return level << 16 | level << 8 | level + } + return PixelSprite(width: width, height: height, palette: palette, pixels: pixels) + } } /// Which settings window, onboarding and menu bar the app shows (ADR-0021). The korekore UI opens only with diff --git a/app/Sources/VibeBuddyCore/Status.swift b/app/Sources/VibeBuddyCore/Status.swift index db206cd0..39be8790 100644 --- a/app/Sources/VibeBuddyCore/Status.swift +++ b/app/Sources/VibeBuddyCore/Status.swift @@ -10,8 +10,10 @@ public struct Status: Codable, Equatable { public var config: DaemonConfig /// What the update manifest offers (ADR-0010); absent from older daemons. public var updates: UpdateStatus? + /// Every Activity, newest first, as the box's task cards show them; absent from older daemons. + public var activities: [ActivitySummary]? - public init(daemon: DaemonInfo, device: DeviceState, today: TodaySummary, hooks: HooksSeen, operation: DeviceOperation?, config: DaemonConfig, updates: UpdateStatus? = nil) { + public init(daemon: DaemonInfo, device: DeviceState, today: TodaySummary, hooks: HooksSeen, operation: DeviceOperation?, config: DaemonConfig, updates: UpdateStatus? = nil, activities: [ActivitySummary]? = nil) { self.daemon = daemon self.device = device self.today = today @@ -19,6 +21,25 @@ public struct Status: Codable, Equatable { self.operation = operation self.config = config self.updates = updates + self.activities = activities + } +} + +/// One Activity as the daemon summarises it (daemon/src/activity.rs `ActivitySummary`). +public struct ActivitySummary: Codable, Equatable, Sendable { + /// `codex`, `claude-code`, `github-actions`, or the agent a CLI hook names (`opencode`, `copilot`, `pi`). + public var agent: String + /// The task card's title, with the prefix that tells agents apart (`CC:`, `CX:`…). + public var title: String + public var project: String? + /// `working` or `needs_input`. + public var state: String + + public init(agent: String, title: String, project: String? = nil, state: String) { + self.agent = agent + self.title = title + self.project = project + self.state = state } } diff --git a/desktop/Cargo.toml b/desktop/Cargo.toml index fd742505..b6b9acf2 100644 --- a/desktop/Cargo.toml +++ b/desktop/Cargo.toml @@ -28,3 +28,7 @@ zip = { version = "2", default-features = false, features = ["deflate"] } ksni = "0.3" # The file chooser goes through the desktop portal, as other apps' do. rfd = { version = "0.15", default-features = false, features = ["xdg-portal", "tokio"] } + +[dev-dependencies] +# Draws the korekore views headless into PNGs, to set beside the design canvas (src/korekore/preview.rs). +iced_test = "0.14" diff --git a/desktop/src/korekore/mod.rs b/desktop/src/korekore/mod.rs index d4d963f1..d9c90dbe 100644 --- a/desktop/src/korekore/mod.rs +++ b/desktop/src/korekore/mod.rs @@ -5,12 +5,18 @@ // The views that use all this come in the next steps. #![allow(dead_code)] +pub mod picture; +#[cfg(test)] +mod snapshots; pub mod sprites; pub mod theme; +pub mod view; use iced::Task; use iced::widget::image; +use crate::i18n::tr; + /// Whether this launch asked for the korekore UI. Read once at launch. pub fn requested() -> bool { std::env::var("VIBEBUDDY_UI").is_ok_and(|ui| ui == "korekore") @@ -41,21 +47,22 @@ impl Sprite { /// RGBA bytes at `scale` whole times the size, nearest-neighbour. `tint` (0xRRGGBB) replaces every colour, /// for the one-colour tag. pub fn rgba(&self, scale: u32, tint: Option) -> Vec { - let (width, height) = (self.width * scale, self.height * scale); - let mut bytes = Vec::with_capacity((width * height * 4) as usize); - for y in 0..height { - for x in 0..width { - let index = self.pixels[((y / scale) * self.width + x / scale) as usize]; - bytes.extend_from_slice(&match index.checked_sub(1) { - None => [0; 4], - Some(n) => { - let rgb = tint.unwrap_or(self.palette[usize::from(n)]); - [(rgb >> 16) as u8, (rgb >> 8) as u8, rgb as u8, 0xFF] - } - }); - } - } - bytes + rgba(self.width, self.height, self.palette, self.pixels, scale, tint) + } + + /// The sprite in gray, as CSS `grayscale(1) brightness(b)` draws it: each colour's luminance (Rec. 709 + /// weights), scaled by `brightness`. The canvas grays Kore this way when the box has no link. + pub fn grayed(&self, brightness: f32) -> GraySprite { + let palette = self + .palette + .iter() + .map(|&rgb| { + let (r, g, b) = ((rgb >> 16 & 0xFF) as f32, (rgb >> 8 & 0xFF) as f32, (rgb & 0xFF) as f32); + let level = ((0.2126 * r + 0.7152 * g + 0.0722 * b) * brightness).round().clamp(0.0, 255.0) as u32; + level << 16 | level << 8 | level + }) + .collect(); + GraySprite { width: self.width, height: self.height, palette, pixels: self.pixels } } /// An image of the sprite at `scale` whole times its size; show it at that size, so nothing resamples it. @@ -64,6 +71,128 @@ impl Sprite { } } +/// A sprite with its palette grayed; drawn like any other. +pub struct GraySprite { + width: u32, + height: u32, + palette: Vec, + pixels: &'static [u8], +} + +impl GraySprite { + pub fn rgba(&self, scale: u32) -> Vec { + rgba(self.width, self.height, &self.palette, self.pixels, scale, None) + } + + pub fn handle(&self, scale: u32, tint: Option) -> image::Handle { + let bytes = rgba(self.width, self.height, &self.palette, self.pixels, scale, tint); + image::Handle::from_rgba(self.width * scale, self.height * scale, bytes) + } +} + +fn rgba(width: u32, height: u32, palette: &[u32], pixels: &[u8], scale: u32, tint: Option) -> Vec { + let (out_width, out_height) = (width * scale, height * scale); + let mut bytes = Vec::with_capacity((out_width * out_height * 4) as usize); + for y in 0..out_height { + for x in 0..out_width { + let index = pixels[((y / scale) * width + x / scale) as usize]; + bytes.extend_from_slice(&match index.checked_sub(1) { + None => [0; 4], + Some(n) => { + let rgb = tint.unwrap_or(palette[usize::from(n)]); + [(rgb >> 16) as u8, (rgb >> 8) as u8, rgb as u8, 0xFF] + } + }); + } + } + bytes +} + +/// The tray's Kore (canvas: "Mac · Menu bar", bottom row): in colour online, with a `sun` dot beside it when an +/// agent needs you, gray and asleep without a link. ARGB32 rows, as StatusNotifierItem pixmaps are. +pub fn tray_icon(picture: &picture::BoxPicture, scale: u32) -> (u32, u32, Vec) { + // The dot is the design's 7 px circle with its 1.5 px ink edge, at whole pixels. + const DOT: [&str; 7] = ["..iii..", ".isssi.", "isssssi", "isssssi", "isssssi", ".isssi.", "..iii.."]; + let needs_you = picture.needs_you(); + let kore = if needs_you { &sprites::KORE_INPUT } else { &sprites::KORE_NORMAL }; + let rgba = if picture.mood == picture::Mood::NoLink { + sprites::KORE_SLEEP.grayed(0.75).rgba(scale) + } else { + kore.rgba(scale, None) + }; + let kore_width = kore.width * scale; + let width = if needs_you { kore_width + (4 + 7) * scale } else { kore_width }; + let height = kore.height * scale; + let mut out = vec![0u8; (width * height * 4) as usize]; + for y in 0..height { + for x in 0..width { + let pixel = if x < kore_width { + let at = ((y * kore_width + x) * 4) as usize; + [rgba[at + 3], rgba[at], rgba[at + 1], rgba[at + 2]] + } else { + let (dx, dy) = ((x - kore_width) / scale, y / scale); + let row = dy.checked_sub((kore.height - 7) / 2).and_then(|row| DOT.get(row as usize)); + match row.and_then(|row| dx.checked_sub(4).and_then(|col| row.as_bytes().get(col as usize))) { + Some(b'i') => [0xFF, 0x1C, 0x17, 0x30], + Some(b's') => [0xFF, 0xFF, 0xD2, 0x3F], + _ => [0; 4], + } + }; + out[((y * width + x) * 4) as usize..][..4].copy_from_slice(&pixel); + } + } + (width, height, out) +} + +/// The settings window's sections, in the sidebar's order (docs/design/korekore/README.md). +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum Section { + Character, + Agents, + Conversation, + Device, + General, + Advanced, +} + +impl Section { + pub const ALL: [Section; 6] = + [Section::Character, Section::Agents, Section::Conversation, Section::Device, Section::General, Section::Advanced]; + + pub fn title(self) -> String { + match self { + Section::Character => tr("Character", &[]), + Section::Agents => tr("Agents", &[]), + Section::Conversation => tr("Conversation", &[]), + Section::Device => tr("Device", &[]), + Section::General => tr("General", &[]), + Section::Advanced => tr("Advanced", &[]), + } + } + + pub fn subtitle(self) -> String { + match self { + Section::Character => tr("Who lives in the box", &[]), + Section::Agents => tr("Who the box watches", &[]), + Section::Conversation => tr("Hold K0 on the box and ask", &[]), + Section::Device => tr("The box, its firmware and its network", &[]), + Section::General => tr("How korekore behaves on this computer", &[]), + Section::Advanced => tr("For when something's off", &[]), + } + } + + pub fn tile(self) -> &'static str { + match self { + Section::Character => "icon-nav-char", + Section::Agents => "icon-nav-agents", + Section::Conversation => "icon-nav-chat", + Section::Device => "icon-nav-box", + Section::General => "icon-nav-gen", + Section::Advanced => "icon-nav-adv", + } + } +} + #[cfg(test)] mod tests { use super::*; @@ -97,6 +226,21 @@ mod tests { } } + #[test] + fn the_tray_icon_adds_a_sun_dot_only_when_an_agent_needs_you() { + use crate::status::{Activity, Status}; + let mut status = Status::default(); + status.device.connected = true; + let (width, height, pixels) = tray_icon(&picture::BoxPicture::derive(Some(&status)), 2); + assert_eq!((width, height, pixels.len()), (40, 36, 40 * 36 * 4)); + status.activities = vec![Activity { agent: "codex".into(), title: "CX:Ask".into(), state: "needs_input".into(), ..Activity::default() }]; + let (width, _, pixels) = tray_icon(&picture::BoxPicture::derive(Some(&status)), 2); + assert_eq!(width, 62); + // The dot's centre, in ARGB: sun. + let at = ((17 * 62 + 40 + 2 * 7) * 4) as usize; + assert_eq!(&pixels[at..at + 4], [0xFF, 0xFF, 0xD2, 0x3F]); + } + #[test] fn the_theme_matches_the_tokens() { assert_eq!(theme::INK, iced::Color::from_rgb8(0x1C, 0x17, 0x30)); diff --git a/desktop/src/korekore/picture.rs b/desktop/src/korekore/picture.rs new file mode 100644 index 00000000..f4f04ff0 --- /dev/null +++ b/desktop/src/korekore/picture.rs @@ -0,0 +1,193 @@ +//! What the korekore UI shows of the box (ADR-0021): the mini box in the sidebar and the tray's Kore. It is drawn +//! from the daemon's status, not from a screen capture, so it costs nothing over the link. The Mac derives the same +//! in `BoxPicture.swift`. + +use crate::status::{Status, Today}; + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum Mood { + Ready, + Working, + Input, + Pomodoro, + Leisure, + NoLink, +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum Link { + Usb, + Lan, + Relay, +} + +impl Link { + pub fn label(self) -> &'static str { + match self { + Link::Usb => "USB", + Link::Lan => "LAN", + Link::Relay => "RELAY", + } + } +} + +/// A task card as the box shows it: the agent's tile and the title without its prefix. +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct Ticket { + pub icon: &'static str, + pub title: String, + pub needs_input: bool, +} + +#[derive(Clone, Debug, PartialEq)] +pub struct BoxPicture { + pub mood: Mood, + pub daemon_alive: bool, + /// How the box is linked; None without a link. + pub link: Option, + /// The newest three, as the box's first page shows them. + pub tickets: Vec, + pub today: Today, + pub firmware_version: Option, +} + +/// The box can show this many cards on a page. +const TICKETS_SHOWN: usize = 3; + +impl BoxPicture { + /// `None` means the daemon isn't answering. + pub fn derive(status: Option<&Status>) -> Self { + let activities = status.map(|status| status.activities.as_slice()).unwrap_or_default(); + let device = status.map(|status| &status.device); + let link = device.filter(|device| device.connected).map(|device| { + if device.relay { + Link::Relay + } else if device.network { + Link::Lan + } else { + Link::Usb + } + }); + let mood = match (link, device.and_then(|device| device.mode.as_deref())) { + (None, _) => Mood::NoLink, + (_, Some("pomodoro")) => Mood::Pomodoro, + (_, Some("leisure")) => Mood::Leisure, + _ if activities.iter().any(|activity| activity.state == "needs_input") => Mood::Input, + _ if !activities.is_empty() => Mood::Working, + _ => Mood::Ready, + }; + let tickets = activities + .iter() + .take(TICKETS_SHOWN) + .map(|activity| Ticket { + icon: icon_for_agent(&activity.agent), + title: card_title(&activity.title).to_owned(), + needs_input: activity.state == "needs_input", + }) + .collect(); + Self { + mood, + daemon_alive: status.is_some(), + link, + tickets, + today: status.map(|status| status.today.clone()).unwrap_or_default(), + firmware_version: device.and_then(|device| device.firmware_version.clone()), + } + } + + pub fn needs_you(&self) -> bool { + self.tickets.iter().any(|ticket| ticket.needs_input) + } +} + +/// The agent's tile in docs/design/korekore/pixel/icons.json; anything else is the user's own events. +pub fn icon_for_agent(agent: &str) -> &'static str { + match agent { + "claude-code" => "cc", + "codex" => "cx", + "github-actions" => "ci", + "opencode" => "oc", + "copilot" => "gh", + "pi" => "pi", + _ => "api", + } +} + +/// The title without the prefix the daemon adds to tell agents apart (`CC:`, `CX:`…): the tile says that now. +pub fn card_title(title: &str) -> &str { + match title.split_once(':') { + Some((prefix, rest)) + if prefix.chars().count() <= 3 && prefix.chars().all(|c| c.is_ascii_uppercase() || c.is_ascii_digit()) => + { + rest.trim_start() + } + _ => title, + } +} + +/// Busy time as the stat chips show it: `35m`, `4h12m`. +pub fn busy(seconds: u64) -> String { + let minutes = seconds / 60; + if minutes < 60 { format!("{minutes}m") } else { format!("{}h{:02}m", minutes / 60, minutes % 60) } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::status::Activity; + + fn status(connected: bool, mode: &str, activities: &[(&str, &str, &str)]) -> Status { + let mut status = Status::default(); + status.device.connected = connected; + status.device.mode = Some(mode.to_owned()); + status.activities = activities + .iter() + .map(|(agent, title, state)| Activity { + agent: (*agent).to_owned(), + title: (*title).to_owned(), + state: (*state).to_owned(), + ..Activity::default() + }) + .collect(); + status + } + + #[test] + fn the_mood_follows_the_link_the_mode_and_the_cards() { + assert_eq!(BoxPicture::derive(None).mood, Mood::NoLink); + assert_eq!(BoxPicture::derive(Some(&status(false, "duty", &[]))).mood, Mood::NoLink); + assert_eq!(BoxPicture::derive(Some(&status(true, "duty", &[]))).mood, Mood::Ready); + let working = [("codex", "CX:Fix", "working")]; + assert_eq!(BoxPicture::derive(Some(&status(true, "duty", &working))).mood, Mood::Working); + let asking = [("codex", "CX:Fix", "working"), ("claude-code", "CC:Ask", "needs_input")]; + assert_eq!(BoxPicture::derive(Some(&status(true, "duty", &asking))).mood, Mood::Input); + assert_eq!(BoxPicture::derive(Some(&status(true, "pomodoro", &asking))).mood, Mood::Pomodoro); + } + + #[test] + fn tickets_are_the_newest_three_with_tiles_and_no_prefix() { + let four = [ + ("claude-code", "CC:Add Chinese to the box", "working"), + ("codex", "CX:Review changes", "needs_input"), + ("github-actions", "CI:App tests", "working"), + ("pi", "PI:Older", "working"), + ]; + let picture = BoxPicture::derive(Some(&status(true, "duty", &four))); + let tickets: Vec<(&str, &str, bool)> = + picture.tickets.iter().map(|ticket| (ticket.icon, ticket.title.as_str(), ticket.needs_input)).collect(); + assert_eq!( + tickets, + [("cc", "Add Chinese to the box", false), ("cx", "Review changes", true), ("ci", "App tests", false)] + ); + assert!(picture.needs_you()); + } + + #[test] + fn only_a_short_capital_prefix_is_dropped() { + assert_eq!(card_title("CX:Review"), "Review"); + assert_eq!(card_title("Fix: the build"), "Fix: the build"); + assert_eq!(card_title("No prefix"), "No prefix"); + assert_eq!(busy(35 * 60), "35m"); + assert_eq!(busy(4 * 3600 + 12 * 60), "4h12m"); + } +} diff --git a/desktop/src/korekore/snapshots.rs b/desktop/src/korekore/snapshots.rs new file mode 100644 index 00000000..4ba2affd --- /dev/null +++ b/desktop/src/korekore/snapshots.rs @@ -0,0 +1,60 @@ +//! Draws the korekore views headless, with the canvas's sample data, into PNGs to set beside the design's boards: +//! `cargo test -p vibebuddy-desktop korekore::snapshots -- --ignored`, then look in target/korekore-preview. + +use iced::{Element, Settings, Theme}; +use iced_test::simulator::Simulator; + +use super::picture::BoxPicture; +use super::{FONTS, Section, view}; +use crate::status::{Activity, Status}; + +fn picture(connected: bool, activities: &[(&str, &str, &str)]) -> BoxPicture { + let mut status = Status::default(); + status.device.connected = connected; + status.device.mode = Some("duty".to_owned()); + status.device.firmware_version = Some("0.5.0".to_owned()); + status.today.done = 7; + status.today.asks = 3; + status.today.busy_seconds = 15_120; + status.activities = activities + .iter() + .map(|(agent, title, state)| Activity { + agent: (*agent).to_owned(), + title: (*title).to_owned(), + state: (*state).to_owned(), + ..Activity::default() + }) + .collect(); + BoxPicture::derive(Some(&status)) +} + +fn save(name: &str, size: (f32, f32), element: Element<'_, view::Pick>) { + let settings = Settings { fonts: FONTS.iter().map(|font| (*font).into()).collect(), ..Settings::default() }; + let mut simulator = Simulator::with_size(settings, size, element); + let path = std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("../target/korekore-preview").join(format!("{name}.png")); + // The simulator only writes a file that isn't there yet. + let written = path.with_file_name(format!("{name}-tiny-skia.png")); + let _ = std::fs::remove_file(&written); + simulator.snapshot(&Theme::Light).unwrap().matches_image(&path).unwrap(); + println!("wrote {}", written.display()); +} + +#[test] +#[ignore = "writes PNGs for review; run with --ignored"] +fn draw_the_korekore_views() { + let working = picture( + true, + &[ + ("claude-code", "CC:Add Chinese to the box", "working"), + ("codex", "CX:Fix voice reply", "working"), + ("github-actions", "CI:App tests", "working"), + ], + ); + let asking = picture(true, &[("codex", "CX:Review changes", "needs_input"), ("claude-code", "CC:Add Chinese to the box", "working")]); + // The window's inside, as on the canvas (960 × 772 less its 3 px outline). + save("window-character", (954.0, 766.0), view::settings(&working, &Section::ALL, Section::Character, "0.5.0", view::pending())); + save("window-device-asking", (954.0, 766.0), view::settings(&asking, &Section::ALL, Section::Device, "0.5.0", view::pending())); + for (name, sample) in [("working", &working), ("asking", &asking), ("quiet", &picture(true, &[])), ("no-link", &picture(false, &[]))] { + save(&format!("minibox-{name}"), (214.0, 166.0), view::mini_box(sample)); + } +} diff --git a/desktop/src/korekore/view.rs b/desktop/src/korekore/view.rs new file mode 100644 index 00000000..42622b8c --- /dev/null +++ b/desktop/src/korekore/view.rs @@ -0,0 +1,285 @@ +//! The korekore settings window (canvas: "Mac · Character (sidebar)" and its siblings): the sidebar with the mini +//! box, and the section's page beside it. The same layout as the Mac's `KorekoreUI`, in iced. Omarchy draws the +//! window's frame here, so the view is the inside of the design's window: no outline or shadow of its own. + +use iced::widget::{Space, button, column, container, image, row, text}; +use iced::{Alignment, Background, Border, Color, Element, Font, Length, Padding, Shadow, Vector}; + +use super::picture::{BoxPicture, Mood}; +use super::sprites; +use super::theme::{self, typography}; +use super::{Section, Sprite}; +use crate::i18n::tr; + +/// What the view sends back: the user picked a section. +#[derive(Clone, Copy, Debug)] +pub struct Pick(pub Section); + +const ROUNDED: &str = "Rounded Mplus 1c"; +const PIXEL: Font = typography::BOX_TEXT.font; + +fn rounded(weight: iced::font::Weight) -> Font { + Font { family: iced::font::Family::Name(ROUNDED), weight, ..Font::DEFAULT } +} + +fn sprite(sprite: &Sprite, scale: u32, gray: bool) -> image::Image { + sized(sprite, scale, gray, scale as f32) +} + +/// A sprite drawn at `scale` whole times and shown at `shown` points per pixel, never resampled smoothly. +fn sized(sprite: &Sprite, scale: u32, gray: bool, shown: f32) -> image::Image { + let handle = if gray { sprite.grayed(0.75).handle(scale, None) } else { sprite.handle(scale, None) }; + image(handle) + .width(Length::Fixed(sprite.width as f32 * shown)) + .height(Length::Fixed(sprite.height as f32 * shown)) + .filter_method(image::FilterMethod::Nearest) +} + +fn sticker(fill: Color, radius: f32, stroke: f32, shadow: f32) -> container::Style { + container::Style { + background: Some(Background::Color(fill)), + border: Border { color: theme::INK, width: stroke, radius: radius.into() }, + shadow: Shadow { color: theme::INK, offset: Vector::new(0.0, shadow), blur_radius: 0.0 }, + ..container::Style::default() + } +} + +fn mood_word(mood: Mood) -> &'static str { + match mood { + Mood::Ready => "READY", + Mood::Working => "WORKING", + Mood::Input => "ASK", + Mood::Pomodoro => "POMODORO", + Mood::Leisure => "LEISURE", + Mood::NoLink => "NO LINK", + } +} + +fn mood_color(mood: Mood) -> Color { + match mood { + Mood::Ready | Mood::Leisure => theme::LAVENDER, + Mood::Working => theme::SKY, + Mood::Input => theme::SUN, + Mood::Pomodoro => theme::KORE_PINK, + Mood::NoLink => theme::MIST, + } +} + +fn kore(mood: Mood) -> &'static Sprite { + match mood { + Mood::Ready | Mood::Pomodoro | Mood::Leisure => &sprites::KORE_NORMAL, + Mood::Working => &sprites::KORE_WORKING, + Mood::Input => &sprites::KORE_INPUT, + Mood::NoLink => &sprites::KORE_SLEEP, + } +} + +fn tile(name: &str) -> &'static Sprite { + sprites::ALL.iter().find(|(key, _)| *key == name).map(|(_, sprite)| *sprite).unwrap_or(&sprites::ICON_API) +} + +/// The box's screen redrawn (canvas: "App sidebar component"): laid out at the box's 320 × 240 and shown at 0.65, +/// 208 × 156, as the design does, inside a 3 px outline. +pub fn mini_box<'a, M: 'a>(picture: &BoxPicture) -> Element<'a, M> { + const S: f32 = 0.65; + // iced clips square, so the screen's own corners are rounded to sit inside the outline. + const INNER: f32 = theme::RADIUS_MD - theme::STROKE_BOLD; + let screen: Element<'a, M> = if picture.mood == Mood::NoLink { + container( + column![ + text("Z z").font(PIXEL).size(14.0 * S).color(theme::MIST), + sized(&sprites::KORE_SLEEP, 6, true, 6.0 * S), + text("NO LINK").font(PIXEL).size(typography::BOX_STATE.size * S).color(theme::MIST), + text("waiting for the Mac").font(PIXEL).size(11.0 * S).color(theme::MIST_TEXT), + ] + .spacing(6.0 * S) + .align_x(Alignment::Center), + ) + .center(Length::Fill) + .style(|_| container::Style { + background: Some(theme::BOX_GRAY_GROUND.into()), + border: Border { radius: INNER.into(), ..Border::default() }, + ..container::Style::default() + }) + .into() + } else { + let mood = picture.mood; + let side = container( + column![ + sized(kore(mood), 4, false, 4.0 * S), + text(mood_word(mood)).font(PIXEL).size(16.0 * S).color(mood_color(mood)), + ] + .spacing(8.0 * S) + .align_x(Alignment::Center), + ) + .center_y(Length::Fill) + .center_x(Length::Fixed(96.0 * S)) + .style(|_| container::Style { + background: Some(theme::BOX_CARD.into()), + border: Border { radius: iced::border::Radius::default().left(INNER), ..Border::default() }, + ..container::Style::default() + }); + let cards: Element<'a, M> = if picture.tickets.is_empty() { + container( + column![ + text("ALL QUIET").font(PIXEL).size(12.0 * S).color(theme::BOX_TEXT), + text(format!( + "{} done · {} asks · {} busy", + picture.today.done, + picture.today.asks, + super::picture::busy(picture.today.busy_seconds).to_uppercase() + )) + .font(PIXEL) + .size(10.0 * S) + .color(theme::BOX_TEXT_MUTED), + ] + .spacing(6.0 * S) + .align_x(Alignment::Center), + ) + .center(Length::Fill) + .into() + } else { + column(picture.tickets.iter().map(|ticket| { + container( + row![ + sized(tile(&format!("icon-{}", ticket.icon)), 2, false, 2.0 * S), + text(ticket.title.clone()).font(PIXEL).size(13.0 * S).color(theme::BOX_TEXT).wrapping(text::Wrapping::None), + ] + .spacing(8.0 * S) + .align_y(Alignment::Center), + ) + .padding(7.0 * S) + .width(Length::Fill) + .clip(true) + .style(|_| container::Style { + background: Some(theme::BOX_CARD.into()), + border: Border { radius: (8.0 * S).into(), ..Border::default() }, + ..container::Style::default() + }) + .into() + })) + .spacing(8.0 * S) + .padding(Padding::from([10.0 * S, 8.0 * S])) + .into() + }; + container(row![side, cards]) + .style(|_| container::Style { + background: Some(theme::BOX_GROUND.into()), + border: Border { radius: INNER.into(), ..Border::default() }, + ..container::Style::default() + }) + .into() + }; + container(container(screen).width(208.0).height(156.0).clip(true)) + .padding(theme::STROKE_BOLD) + .style(|_| sticker(theme::INK, theme::RADIUS_MD, theme::STROKE_BOLD, theme::STICKER_SM)) + .into() +} + +fn sidebar<'a>(picture: &BoxPicture, sections: &[Section], current: Section, app_version: &str) -> Element<'a, Pick> { + let link_line = if !picture.daemon_alive { + tr("DAEMON NOT RUNNING", &[]) + } else if let Some(link) = picture.link { + tr("BOX ONLINE · %@", &[&link.label()]) + } else { + tr("NO BOX LINKED", &[]) + }; + let linked = picture.link.is_some(); + let dot = container(Space::new()) + .width(8) + .height(8) + .style(move |_| container::Style { + background: Some((if linked { theme::MINT } else { theme::MIST }).into()), + border: Border { color: theme::INK, width: theme::STROKE_THIN, radius: 0.0.into() }, + ..container::Style::default() + }); + let status = column![ + row![dot, text(link_line).font(PIXEL).size(12).color(theme::INK)].spacing(6).align_y(Alignment::Center), + text(tr("%lld done · %lld asks today", &[&picture.today.done, &picture.today.asks])).font(PIXEL).size(12).color(theme::MUTED), + ] + .spacing(2) + .padding(Padding::from([0, 4])); + let nav = column(sections.iter().map(|§ion| { + let on = section == current; + button( + row![sprite(tile(section.tile()), 2, false), text(section.title()).font(rounded(iced::font::Weight::ExtraBold)).size(15)] + .spacing(10) + .align_y(Alignment::Center), + ) + .padding(Padding::from([6, 8])) + .width(Length::Fill) + .on_press(Pick(section)) + .style(move |_, _| button::Style { + background: on.then_some(Background::Color(theme::INK)), + text_color: if on { theme::CREAM } else { theme::INK }, + border: Border { radius: 12.0.into(), ..Border::default() }, + ..button::Style::default() + }) + .into() + })) + .spacing(4); + let version = match &picture.firmware_version { + Some(firmware) => tr("app %@ · box fw %@", &[&app_version, firmware]), + None => tr("app %@", &[&app_version]), + }; + let content = column![ + column![ + text("korekore").font(rounded(iced::font::Weight::ExtraBold)).size(26).color(theme::INK), + container(sprite(&sprites::TAG_YOUR_VIBEBUDDY, 2, false)).padding(Padding::ZERO.top(4)), + ] + .spacing(2) + .padding(Padding::from([0, 2])), + container(mini_box(picture)).center_x(Length::Fill), + status, + nav, + Space::new().height(Length::Fill), + text(version).font(PIXEL).size(12).color(theme::MUTED_2), + ] + .spacing(14); + container(container(content).padding(Padding { top: 14.0, right: 14.0, bottom: 16.0, left: 14.0 })) + .width(240.0 - theme::STROKE_BOLD) + .height(Length::Fill) + .style(|_| container::Style { background: Some(theme::PAPER.into()), ..container::Style::default() }) + .into() +} + +/// The whole window: sidebar, its 3 px ink edge, and the page. +pub fn settings<'a>( + picture: &BoxPicture, + sections: &[Section], + current: Section, + app_version: &str, + page: Element<'a, Pick>, +) -> Element<'a, Pick> { + let edge = container(Space::new()).width(theme::STROKE_BOLD).height(Length::Fill).style(|_| container::Style { + background: Some(theme::INK.into()), + ..container::Style::default() + }); + let title = row![ + text(current.title()).font(typography::TITLE.font).size(typography::TITLE.size).color(theme::INK), + Space::new().width(Length::Fill), + text(current.subtitle()).font(rounded(iced::font::Weight::Normal)).size(13).color(theme::MUTED), + ] + .align_y(Alignment::End); + let main = container(column![title, page].spacing(14)) + .padding(Padding { top: 22.0, right: 22.0, bottom: 20.0, left: 22.0 }) + .width(Length::Fill) + .height(Length::Fill); + container(row![sidebar(picture, sections, current, app_version), edge, main]) + .width(Length::Fill) + .height(Length::Fill) + .style(|_| container::Style { background: Some(theme::CREAM.into()), ..container::Style::default() }) + .into() +} + +/// Stands in for a page that comes with a later step of the korekore UI. +pub fn pending<'a>() -> Element<'a, Pick> { + container(text(tr("This page comes with the next step of korekore.", &[])).font(rounded(iced::font::Weight::Normal)).size(14).color(theme::MUTED)) + .center_x(Length::Fill) + .center_y(Length::Fixed(120.0)) + .style(|_| container::Style { + border: Border { color: theme::INK, width: theme::STROKE_BASE, radius: theme::RADIUS_MD.into() }, + ..container::Style::default() + }) + .into() +} diff --git a/desktop/src/main.rs b/desktop/src/main.rs index 800da1d7..d1488f76 100644 --- a/desktop/src/main.rs +++ b/desktop/src/main.rs @@ -178,6 +178,8 @@ enum Message { ExportDiagnostics, Done(Result<(), String>), Quit, + /// A section picked in the korekore UI's sidebar (ADR-0021). + Korekore(korekore::view::Pick), } #[cfg(target_os = "linux")] @@ -268,6 +270,9 @@ struct App { /// VibeBuddy's Omarchy plugin is in the bar, showing the face; the tray icon would be a second one. #[cfg(target_os = "linux")] plugin: bool, + /// The korekore UI's section, when it was asked for at launch (`VIBEBUDDY_UI=korekore`, ADR-0021); None keeps + /// the current UI. + korekore: Option, } struct RestartOffer { @@ -323,6 +328,7 @@ impl App { tray: None, #[cfg(target_os = "linux")] plugin: plugin_in_omarchy_bar(), + korekore: korekore::requested().then_some(korekore::Section::Character), }; // The first launch shows the window, so it's clear where the app went; later ones stay in the tray, unless a // language change restarted the app from its window. Without a tray (macOS builds, for development) the @@ -460,10 +466,16 @@ impl App { if let Some(id) = self.settings { return window::gain_focus(id); } - // The same as the Mac's: room for the whole Character tab, resizable down to the old size. + // The same as the Mac's: room for the whole Character tab, resizable down to the old size. The + // korekore window is the design's 960 × 772, down to 900 × 760. + let (size, min_size) = if self.korekore.is_some() { + (iced::Size::new(960.0, 772.0), iced::Size::new(900.0, 760.0)) + } else { + (iced::Size::new(760.0, 640.0), iced::Size::new(640.0, 480.0)) + }; let (id, open) = window::open(window::Settings { - size: iced::Size::new(760.0, 640.0), - min_size: Some(iced::Size::new(640.0, 480.0)), + size, + min_size: Some(min_size), #[cfg(target_os = "linux")] platform_specific: window::settings::PlatformSpecific { application_id: "vibebuddy".to_owned(), @@ -854,6 +866,7 @@ impl App { } } Message::Quit => return iced::exit(), + Message::Korekore(korekore::view::Pick(section)) => self.korekore = Some(section), } Task::none() } @@ -863,12 +876,14 @@ impl App { #[cfg(target_os = "linux")] if let Some(TrayHandle(handle)) = self.tray.clone() { let menu = MenuState::derive(self.status.as_ref()); + let kore = self.korekore.map(|_| korekore::picture::BoxPicture::derive(self.status.as_ref())); let [r, g, b, _] = self.theme.palette().text.into_rgba8(); return Task::future(async move { handle .update(move |tray| { tray.menu = menu; tray.color = [r, g, b]; + tray.kore = kore; }) .await; }) @@ -878,6 +893,9 @@ impl App { } fn view(&self, _window: window::Id) -> Element<'_, Message> { + if let Some(section) = self.korekore { + return self.korekore(section); + } if let Some(page) = self.guide { return self.guide(page); } @@ -915,6 +933,18 @@ impl App { container(content).width(Length::Fill).height(Length::Fill).into() } + /// The korekore settings window (ADR-0021); its pages come in the next steps. + fn korekore(&self, section: korekore::Section) -> Element<'_, Message> { + // Voice commands are experimental: no Conversation section while the daemon has them off. + let sections: Vec = korekore::Section::ALL + .into_iter() + .filter(|§ion| section != korekore::Section::Conversation || self.resident) + .collect(); + let picture = korekore::picture::BoxPicture::derive(self.status.as_ref()); + korekore::view::settings(&picture, §ions, section, env!("CARGO_PKG_VERSION"), korekore::view::pending()) + .map(Message::Korekore) + } + /// First run on Linux: what the install script couldn't do. It already connected the agents and set up the start /// at login, so the guide is the Mac's without those pages: find the box, pick a character, put the box on Wi-Fi. fn guide(&self, page: usize) -> Element<'_, Message> { @@ -2230,7 +2260,8 @@ fn run_tray() -> impl futures::Stream { iced::stream::channel(16, async |mut output| { let (events, mut clicks) = futures::channel::mpsc::unbounded(); - let tray = tray::Tray { menu: MenuState::derive(None), color: [255, 255, 255], events }; + let kore = korekore::requested().then(|| korekore::picture::BoxPicture::derive(None)); + let tray = tray::Tray { menu: MenuState::derive(None), kore, color: [255, 255, 255], events }; // At login the app can start before the shell's tray host is up; ksni then registers once it appears, and // again after the shell restarts. The app opens the window if it doesn't (`Message::TrayHost`). match tray.assume_sni_available(true).spawn().await { diff --git a/desktop/src/status.rs b/desktop/src/status.rs index e52a0588..f7345aca 100644 --- a/desktop/src/status.rs +++ b/desktop/src/status.rs @@ -16,6 +16,21 @@ pub struct Status { pub config: Config, /// What the update manifest offers (ADR-0010); absent from older daemons. pub updates: Option, + /// Every Activity, newest first, as the box's task cards show them; empty from older daemons. + pub activities: Vec, +} + +/// One Activity as the daemon summarises it (daemon/src/activity.rs `ActivitySummary`). +#[derive(Clone, Debug, Default, Deserialize, PartialEq)] +#[serde(default)] +pub struct Activity { + /// `codex`, `claude-code`, `github-actions`, or the agent a CLI hook names (`opencode`, `copilot`, `pi`). + pub agent: String, + /// The task card's title, with the prefix that tells agents apart (`CC:`, `CX:`…). + pub title: String, + pub project: Option, + /// `working` or `needs_input`. + pub state: String, } /// The daemon's view of updates; which firmware to offer is its call, as on the Mac. diff --git a/desktop/src/tray.rs b/desktop/src/tray.rs index fa44c4c7..1feda1ef 100644 --- a/desktop/src/tray.rs +++ b/desktop/src/tray.rs @@ -27,6 +27,8 @@ pub enum TrayEvent { pub struct Tray { pub menu: MenuState, + /// With the korekore UI on (ADR-0021) the icon is Kore, drawn from this; None keeps the face. + pub kore: Option, /// The face is drawn in the theme's text color so it reads on the bar. pub color: [u8; 3], pub events: UnboundedSender, @@ -42,6 +44,15 @@ impl ksni::Tray for Tray { } fn icon_pixmap(&self) -> Vec { + if let Some(picture) = &self.kore { + return [1, 2] + .into_iter() + .map(|scale| { + let (width, height, data) = crate::korekore::tray_icon(picture, scale); + Icon { width: width as i32, height: height as i32, data } + }) + .collect(); + } let [r, g, b] = self.color; // A dimmed, eyes-closed face when the box or the daemon is gone, as on the Mac. let (eyes_closed, alpha) = match self.menu.icon { diff --git a/docs/design/korekore/README.md b/docs/design/korekore/README.md index 1b25580b..875cc3d5 100644 --- a/docs/design/korekore/README.md +++ b/docs/design/korekore/README.md @@ -145,6 +145,8 @@ The current UI (settings window, onboarding, menu bar item, box screens) is fini - **Mac menu bar**: today `NSStatusItem` + `NSMenu` (`AppDelegate.swift` l.35, rebuilt l.124-152 from `VibeBuddyCore/MenuState.swift`). With the switch on, use Kore as the icon and a `MenuBarExtra(.window)` panel fed by the same `MenuState`. - **Linux**, new module `desktop/src/korekore/`: a sidebar view and one function per section, mirroring the current `enum Tab` (`main.rs` l.67) and section methods, but in new code; the first-run guide likewise (current `guide()` ~l.905). With the switch on, `view()` (l.877) delegates to it. The korekore UI ignores `theme.rs`/Omarchy and uses its own palette; the current UI keeps following Omarchy. - **Kore in the tray and menu bar**: new sprite code; leave `PixelFace.swift` and `desktop/src/face.rs` as they are for the current UI. +- Done in 2a (behind `VIBEBUDDY_UI=korekore`): the window, the sidebar with the mini box, the menu bar item and its panel, and Kore in the Linux tray. The mini box reads the Activities `/v1/status` now carries. The Mac views live in `app/Sources/KorekoreUI` and are drawn with sample data by `swift run --package-path app KorekorePreview `; the Linux ones by `cargo test -p vibebuddy-desktop korekore::snapshots -- --ignored` (into `target/korekore-preview`). Screenshots: `screenshots/phase-2a/`. +- **Linux differs** in two places: the tray keeps its StatusNotifierItem menu, since a tray host draws that menu itself and has no room for the Mac's panel (the icon is Kore, with the same `sun` dot and gray); and Omarchy draws the window's frame, so the view is the inside of the design's window, without its outline, shadow or window buttons. ### Phase 3: the korekore box diff --git a/docs/design/korekore/screenshots/phase-2a/linux-mini-box.png b/docs/design/korekore/screenshots/phase-2a/linux-mini-box.png new file mode 100644 index 0000000000000000000000000000000000000000..3d2145df83fdaa261bb8e4208358454485c8e2fc GIT binary patch literal 23331 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 literal 0 HcmV?d00001 diff --git a/docs/design/korekore/screenshots/phase-2a/linux-window.png b/docs/design/korekore/screenshots/phase-2a/linux-window.png new file mode 100644 index 0000000000000000000000000000000000000000..96b10b1c2352d4b093bcb698e8ad9c79eee8f1a7 GIT binary patch literal 84031 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%0A1{WDQQ|H(Z=qBoS@=3p*4 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 z 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

481%7Y`eU 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 literal 0 HcmV?d00001 diff --git a/docs/design/korekore/screenshots/phase-2a/mac-menu-icons.png b/docs/design/korekore/screenshots/phase-2a/mac-menu-icons.png new file mode 100644 index 0000000000000000000000000000000000000000..35468204c8a4efa8fc780e6a9a4600822be055fa GIT binary patch literal 1220 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∈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 ezkj^x%*U(X1xym+3Emz! literal 0 HcmV?d00001 diff --git a/docs/design/korekore/screenshots/phase-2a/mac-menu-panel.png b/docs/design/korekore/screenshots/phase-2a/mac-menu-panel.png new file mode 100644 index 0000000000000000000000000000000000000000..5240ca77a2976a56ab222d177d5410d24d8848b8 GIT binary patch literal 58935 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

oTL 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 Fe*+<@T(STF literal 0 HcmV?d00001 diff --git a/docs/design/korekore/screenshots/phase-2a/mac-mini-box.png b/docs/design/korekore/screenshots/phase-2a/mac-mini-box.png new file mode 100644 index 0000000000000000000000000000000000000000..32d1bbdcd32f19ea603c0efcb1041a285d9e0013 GIT binary patch literal 30285 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 literal 0 HcmV?d00001 diff --git a/docs/design/korekore/screenshots/phase-2a/mac-window.png b/docs/design/korekore/screenshots/phase-2a/mac-window.png new file mode 100644 index 0000000000000000000000000000000000000000..b375096213cb9af07826c3e766c65a064da7c887 GIT binary patch literal 112923 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 literal 0 HcmV?d00001 diff --git a/tools/check-localization.py b/tools/check-localization.py index 5c81df5b..dd6dca3c 100755 --- a/tools/check-localization.py +++ b/tools/check-localization.py @@ -28,7 +28,7 @@ from pathlib import Path ROOT = Path(__file__).resolve().parent.parent -SOURCES = [ROOT / "app/Sources/VibeBuddy", ROOT / "app/Sources/VibeBuddyCore"] +SOURCES = [ROOT / "app/Sources/VibeBuddy", ROOT / "app/Sources/VibeBuddyCore", ROOT / "app/Sources/KorekoreUI"] RUST_SOURCES = ROOT / "desktop/src" TABLE = ROOT / "app/Localization/zh-Hans.lproj/Localizable.strings" @@ -134,7 +134,7 @@ def source_keys() -> dict[str, str]: continue line = code.count("\n", 0, offset) + 1 keys.setdefault(text, f"{path.relative_to(ROOT)}:{line}") - for path in sorted(RUST_SOURCES.glob("*.rs")): + for path in sorted(RUST_SOURCES.rglob("*.rs")): code = path.read_text(encoding="utf-8") for match in re.finditer(r'(?> 16 & 0xFF) / 255, green: Double(rgb >> 8 & 0xFF) / 255, " "blue: Double(rgb & 0xFF) / 255)", " }", "}", ""] @@ -289,7 +289,7 @@ def outputs(): tokens = load("tokens.json") all_sprites = sprites(tokens) return { - "app/Sources/VibeBuddy/Korekore/KorekoreTheme.swift": swift_theme(tokens), + "app/Sources/KorekoreUI/KorekoreTheme.swift": swift_theme(tokens), "app/Sources/VibeBuddyCore/Korekore/KorekoreSprites.swift": swift_sprites(all_sprites), "desktop/src/korekore/theme.rs": rust_theme(tokens), "desktop/src/korekore/sprites.rs": rust_sprites(all_sprites, firmware=False), From ed61b3898c82a7625a5e58e4bae94ba4bdaf50ea Mon Sep 17 00:00:00 2001 From: dragon Date: Fri, 23 Oct 2026 23:58:07 +0800 Subject: [PATCH 3/3] korekore: spell out the gray conversion so CI's Swift type-checks it macos-15's compiler gave up on the luminance expression in PixelSprite.grayed ("unable to type-check this expression in reasonable time"); the same steps, each typed, build there and here. Co-Authored-By: Claude Opus 5.5 --- app/Sources/VibeBuddyCore/Korekore/PixelSprite.swift | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/Sources/VibeBuddyCore/Korekore/PixelSprite.swift b/app/Sources/VibeBuddyCore/Korekore/PixelSprite.swift index 7442d5ce..84de62ec 100644 --- a/app/Sources/VibeBuddyCore/Korekore/PixelSprite.swift +++ b/app/Sources/VibeBuddyCore/Korekore/PixelSprite.swift @@ -38,10 +38,14 @@ public struct PixelSprite: Sendable { /// The sprite in gray, as CSS `grayscale(1) brightness(b)` draws it: each colour's luminance (Rec. 709 /// weights), scaled by `brightness`. The canvas grays Kore this way when the box has no link. public func grayed(brightness: Double) -> PixelSprite { - let palette = palette.map { rgb -> UInt32 in - let (r, g, b) = (Double(rgb >> 16 & 0xFF), Double(rgb >> 8 & 0xFF), Double(rgb & 0xFF)) - let level = UInt32(min(255, max(0, ((0.2126 * r + 0.7152 * g + 0.0722 * b) * brightness).rounded()))) - return level << 16 | level << 8 | level + // Typed step by step: as one expression it is too slow for the type checker on CI's Xcode. + let palette = palette.map { (rgb: UInt32) -> UInt32 in + let r: Double = Double((rgb >> 16) & 0xFF) + let g: Double = Double((rgb >> 8) & 0xFF) + let b: Double = Double(rgb & 0xFF) + let luminance: Double = 0.2126 * r + 0.7152 * g + 0.0722 * b + let level: UInt32 = UInt32(Swift.min(255.0, Swift.max(0.0, (luminance * brightness).rounded()))) + return (level << 16) | (level << 8) | level } return PixelSprite(width: width, height: height, palette: palette, pixels: pixels) }