📝 添加 AGENTS.md 和 README.md
This commit is contained in:
parent
4ab9a7b28c
commit
c5a2cbef12
62
AGENTS.md
Normal file
62
AGENTS.md
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
# AGENTS.md
|
||||||
|
|
||||||
|
## 项目概述
|
||||||
|
|
||||||
|
FloatingMonitor 是 macOS 原生系统监控悬浮窗应用,纯 Swift + SwiftUI + AppKit 构建,实时展示 CPU/GPU/内存/Swap 占用率及 Top 进程。
|
||||||
|
|
||||||
|
## 技术栈
|
||||||
|
|
||||||
|
- **语言**: Swift 6.2
|
||||||
|
- **UI**: SwiftUI + AppKit 混编
|
||||||
|
- **构建**: Swift Package Manager (`swift build / swift run`)
|
||||||
|
- **最低系统**: macOS 14 (Sonoma)
|
||||||
|
- **架构**: 纯 AppKit 窗口 + SwiftUI 视图通过 NSHostingView 嵌入
|
||||||
|
|
||||||
|
## 项目结构
|
||||||
|
|
||||||
|
```
|
||||||
|
Sources/FloatingMonitor/
|
||||||
|
├── main.swift # 入口(5行)
|
||||||
|
├── App/
|
||||||
|
│ ├── AppDelegate.swift # NSApplicationDelegate + NSStatusItem + NSMenu
|
||||||
|
│ ├── FloatingWindow.swift # 悬浮窗 NSWindow 子类
|
||||||
|
│ ├── FloatingWindowController.swift # 毛玻璃 + 视图嵌入 + 显隐逻辑
|
||||||
|
│ └── SettingsWindowController.swift # 独立设置窗口
|
||||||
|
├── SystemMonitor.swift # 数据采集(host_statistics / IOKit / sysctl / ps)
|
||||||
|
├── Configuration.swift # UserDefaults 持久化配置(单例)
|
||||||
|
├── ContentView.swift # 主界面 + 布局引擎
|
||||||
|
└── Views/
|
||||||
|
├── GaugeView.swift # 5 种计量器样式(bar/ring/text/pie/compact)
|
||||||
|
├── SettingsView.swift # 设置面板(显示/样式/行号/列位/宽高)
|
||||||
|
└── ProcessListView.swift # Top 进程列表
|
||||||
|
```
|
||||||
|
|
||||||
|
## 关键约定
|
||||||
|
|
||||||
|
### 窗口管理
|
||||||
|
- `FloatingWindow`:borderless + `.floating` level + `isMovableByWindowBackground`
|
||||||
|
- 毛玻璃通过 `NSVisualEffectView`(`.hudWindow` + `.behindWindow`)实现
|
||||||
|
- 所有子视图使用 Auto Layout 约束(`translatesAutoresizingMaskIntoConstraints = false`),禁止 frame 直接赋值
|
||||||
|
|
||||||
|
### 数据流
|
||||||
|
- `SystemMonitor` 是 `@MainActor ObservableObject`,通过 Timer 驱动刷新
|
||||||
|
- `Configuration` 是单例 `@ObservedObject`,所有持久化走 `UserDefaults`
|
||||||
|
- 跨组件通信(设置→主窗口)用 `NotificationCenter`(`resizeMonitorWindow`、`refreshIntervalChanged`)
|
||||||
|
|
||||||
|
### 布局系统
|
||||||
|
- 每个模块(CPU/GPU/内存/Swap/进程)独立配置 `layoutRow`(1-10)+ `ModulePosition`(left/right/full)
|
||||||
|
- `moduleRows` 计算属性按 row 排序,同行 left+right 配对用 `HStack` 并排,full 独占一行
|
||||||
|
|
||||||
|
### 修改原则
|
||||||
|
- 优先用 `edit_file` 精准修改,不要整文件重写
|
||||||
|
- 每个 Swift 文件不超过 200 行
|
||||||
|
- 新功能先在 `Configuration` 加属性,再在 `SettingsView` 加 UI,最后在 `ContentView` 消费
|
||||||
|
|
||||||
|
## 运行
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd FloatingMonitor
|
||||||
|
swift run
|
||||||
|
```
|
||||||
|
|
||||||
|
点击菜单栏仪表盘图标呼出悬浮窗,左键切换显隐,右键展开菜单。
|
||||||
72
README.md
Normal file
72
README.md
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
# Monitor
|
||||||
|
|
||||||
|
> macOS 原生系统监控悬浮窗 —— 实时 CPU/GPU/内存/Swap + Top进程,半透明可拖动,一切可定制。
|
||||||
|
|
||||||
|
## 截图
|
||||||
|
|
||||||
|
点击菜单栏 <img src="https://img.shields.io/badge/⏲-Monitor-blue" height="18"> 图标呼出悬浮窗:
|
||||||
|
|
||||||
|
```
|
||||||
|
┌──────────────────────┐
|
||||||
|
│ ⏲ Monitor 21:30:00 ✕│
|
||||||
|
│──────────────────────│
|
||||||
|
│ CPU ████████░░ 42% │
|
||||||
|
│ 10 核心 · Apple M2 Pro│
|
||||||
|
│ │
|
||||||
|
│ 内存 ███░░░░░░░ 35% │
|
||||||
|
│ 5.6 / 16 GB │
|
||||||
|
│ │
|
||||||
|
│ CPU 消耗 Top │
|
||||||
|
│ WindowServer 12.3% │
|
||||||
|
│ Code 8.1% │
|
||||||
|
└──────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
## 功能
|
||||||
|
|
||||||
|
- **CPU / GPU / 内存 / Swap** 实时占用率
|
||||||
|
- **Top 进程** 按 CPU 和内存消耗排列
|
||||||
|
- **5 种计量器样式**:圆环、条状、纯文本、扇形、紧凑横条
|
||||||
|
- **灵活布局**:每个模块独立指定行号 + 左/右/全宽列位
|
||||||
|
- **半透明悬浮窗**:毛玻璃 HUD 风格,任意拖动
|
||||||
|
- **菜单栏图标**:左键切换显隐,右键菜单(设置、退出)
|
||||||
|
- **独立设置窗口**:显示内容、样式、行号列位、宽高、字体、透明度、刷新率全部可调
|
||||||
|
|
||||||
|
## 安装
|
||||||
|
|
||||||
|
### 方式一:DMG
|
||||||
|
下载 `Monitor.dmg`,将 `FloatingMonitor` 拖入 Applications。
|
||||||
|
|
||||||
|
### 方式二:源码运行
|
||||||
|
```bash
|
||||||
|
git clone git@git.cyjai.com:JOJO/Monitor.git
|
||||||
|
cd Monitor
|
||||||
|
swift run
|
||||||
|
```
|
||||||
|
|
||||||
|
## 要求
|
||||||
|
|
||||||
|
- macOS 14 (Sonoma) 或更高
|
||||||
|
- Xcode 16+ 或 Swift 6.2 工具链
|
||||||
|
|
||||||
|
## 使用
|
||||||
|
|
||||||
|
1. 启动后菜单栏出现仪表盘图标
|
||||||
|
2. **左键点击**图标 → 切换悬浮窗显隐
|
||||||
|
3. **右键点击**图标 → 展开菜单(显示设置 / 退出)
|
||||||
|
4. 悬浮窗可**任意拖动**,设置中可调宽高
|
||||||
|
|
||||||
|
## 技术
|
||||||
|
|
||||||
|
| 层面 | 实现 |
|
||||||
|
|------|------|
|
||||||
|
| CPU 采样 | `host_statistics` 双采样差值 |
|
||||||
|
| GPU 占用 | IOKit `IOAccelerator` → `PerformanceStatistics` |
|
||||||
|
| 内存/Swap | `vm_statistics64` / `sysctl vm.swapusage` |
|
||||||
|
| 进程列表 | `ps -eo pid,%cpu,rss,comm` |
|
||||||
|
| UI | SwiftUI + AppKit `NSHostingView` |
|
||||||
|
| 毛玻璃 | `NSVisualEffectView` `.hudWindow` + `.behindWindow` |
|
||||||
|
|
||||||
|
## 许可
|
||||||
|
|
||||||
|
MIT
|
||||||
Loading…
Reference in New Issue
Block a user